如何更改现有ZonedDateTime
对象的时间部分?我想保留日期和时区,但改变小时和分钟。在java.time中设置ZonedDateTime的时间?
4
A
回答
13
TL;博士
zdt.with (LocalTime.of (16 , 15))
不可变对象
的java.time类使用Immutable Objects图案来创建新的对象,而不是改变(“发生变异”)原始对象。
with()
的ZonedDateTime::with
方法是基于另一个但也有一些特别的差异新ZonedDateTime
的灵活方式。您可以传递任何实现TemporalAdjustor
接口的对象。
在这种情况下,我们只想改变时间。 A LocalTime
对象表示没有任何日期且没有任何时区的时间。并且LocalTime
实现TemporalAdjustor
接口。因此,只保留时间值,同时保留日期和时区。
ZonedDateTime marketOpens = ZonedDateTime.of (LocalDate.of (2016 , 1 , 4) , LocalTime.of (9 , 30) , ZoneId.of ("America/New_York"));
ZonedDateTime marketCloses = marketOpens.with (LocalTime.of (16 , 0));
仔细检查时间跨度的持续时间是否与预期的一样,为六个半小时。
Duration duration = Duration.between (marketOpens , marketCloses);
转储到控制台。
System.out.println ("marketOpens: " + marketOpens + " | marketCloses: " + marketCloses + " | duration: " + duration);
marketOpens:2016-01-04T09:30-05:00 [美国/纽约] |市场关闭:2016-01-04T16:00-05:00 [America/New_York] |持续时间:PT6H30M
请记住,在这个例子中,我们也隐含调整秒和分数第二在时间的一天。 LocalTime
对象携带小时,分钟,秒和小数秒。我们指定了一小时一分钟。我们省略了秒和小数秒,导致在构建我们的LocalTime
期间,默认值为0
。应用LocalTime
的所有四个方面以获得我们的新鲜ZonedDateTime
。
只有几个类实现TemporalAdjustor
接口。请参阅该班级文档的列表,其中包括LocalDate
,Month
,Year
等。所以你可以通过任何这些来改变日期时间值的方面。
阅读Hochschild的评论。当您指定一个对特定日期&区域无效的时间时,您必须了解其行为。例如,在夏令时(DST)切换期间。
相关问题
- 1. 的Java 8日期时间:从ZonedDateTime
- 2. 如何设置ZonedDateTime对象在Scala中测试时返回一个固定的时间值?
- 3. 在java中设置的时间间隔
- 4. 在edittext中设置时间
- 5. 在ACCESS中设置时间
- 6. 在堆中创建`LocalDate`(java.time)时出错
- 7. java.time中的年周?
- 8. Period中两个ZonedDateTime之间的差异
- 9. 使用java.time更换时间部分的时刻
- 10. 在simple_html_dom中设置超时时间
- 11. 困惑瞬间,ZonedDateTime和UTC
- 12. 在Hibernate 5.1中使用java.time
- 13. 基于设备时间在timepicker中设置默认时间
- 14. 使用Joda时间解析ZonedDateTime#toString()时的失败
- 15. 设置时间在PHP
- 16. 设置时间戳在Java
- 17. ZonedDateTime如PathVariable在弹簧安置RequestMapping
- 18. 如何在iPhone中获得实时时间,而不是用户在设置中设置的时间?
- 19. java.time与传统时间相关的类java 7
- 20. 设置在AVQueuePlayer中寻找时间iphone
- 21. 在onLocationChanged方法中设置时间戳
- 22. 在android中设置时间表
- 23. 在App.Config中设置日期时间
- 24. 在symfony中设置缓存时间
- 25. 在javascript中设置延迟时间
- 26. 如何在jquery中设置时间?
- 27. 在python中设置()运行时间
- 28. 设置系统时间与在Linux中
- 29. 在Facebook中设置时间线封面?
- 30. 在CloudKit Dasboard中设置下午时间
正确的例子。然而,市场开放和关闭时间通常被定义为当地时间,而不是UTC时间戳,所以'LocalDateTime'和'LocalTime'类型通常是更好的匹配(并且还提供'()()' - 方法)。但是如果你仍然坚持'ZonedDateTime',那么如果在夏季 - 冬季时间切换期间设置的时间偏离最终观察到的结果对象,那么不要太惊讶,因为JSR-310可以制作一个自动调整(推进式战略),承认罕见的情况,而且对于市场时代来说极不可能。 –