如何更改現有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. 在java中設置的時間間隔
- 3. 在堆中創建`LocalDate`(java.time)時出錯
- 4. java.time中的年周?
- 5. Period中兩個ZonedDateTime之間的差異
- 6. 使用java.time更換時間部分的時刻
- 7. 困惑瞬間,ZonedDateTime和UTC
- 8. 在Hibernate 5.1中使用java.time
- 9. 使用Joda時間解析ZonedDateTime#toString()時的失敗
- 10. 如何在iPhone中獲得實時時間,而不是用戶在設置中設置的時間?
- 11. 設置系統時間與在Linux中
- 12. 在CloudKit Dasboard中設置下午時間
- 13. 在python中設置()運行時間
- 14. 在onLocationChanged方法中設置時間戳
- 15. 在Facebook中設置時間線封面?
- 16. 設置在AVQueuePlayer中尋找時間iphone
- 17. 如何在jquery中設置時間?
- 18. 我如何在php中設置時間?
- 19. ZonedDateTime如PathVariable在彈簧安置RequestMapping
- 20. 如何在運行時在QT中設置QTimeEdit中的時間?
- 21. 從joda時間到java.time不一致的`w`符號格式
- 22. java.time與傳統時間相關的類java 7
- 23. Cron時間設置
- 24. android.widget.AnalogClock設置時間
- 25. 設置cronjob時間
- 26. Javascript - 設置時間間隔
- 27. R中的時間序列中的子設置時間
- 28. 在jQuery上設置時間間隔hoverIntent
- 29. 在.NET上設置設備時間CF
- 30. 在postgresql中設置日期和設置時間
正確的例子。然而,市場開放和關閉時間通常被定義爲當地時間,而不是UTC時間戳,所以'LocalDateTime'和'LocalTime'類型通常是更好的匹配(並且還提供'()()' - 方法)。但是如果你仍然堅持'ZonedDateTime',那麼如果在夏季 - 冬季時間切換期間設置的時間偏離最終觀察到的結果對象,那麼不要太驚訝,因爲JSR-310可以製作一個自動調整(推進式戰略),承認罕見的情況,而且對於市場時代來說極不可能。 –