簡體   English   中英

Java 獲取 00:00:00 HRS 和現在之間的持續時間

[英]Java Get time duration between 00:00:00 HRS and Now

我正在嘗試獲取當天的 00:00:00 HRS 和 Instant.now() 的持續時間

Instant startTime = Instant.now().minus(Duration.ofMinutes(????))
Instant endTime = Instant.now();

我應該在這里通過什么來獲得當天的 00:00:00 小時?

瞬間是時間線上的一個瞬間。 這取決於您是否要考慮時區和 DST 更改。

如果您不關心時區或 DST,您可以這樣做

LocalDateTime now = LocalDateTime.now();
ChronoUnit.HOURS.between(now.toLocalDate().atStartOfDay(), now);

返回的long是午夜和當前時間之間的小時數。 在大多數情況下,這將是掛鍾顯示的小時數。 另請注意,此代碼片段沒有使用Instant ,因為 Instant 不知道時間的人類表示,例如午夜 00:00:00。

如果您確實關心時區或 DST,那么您需要指定您的時區以適應時間變化。 例如,在Europe/Amsterdam時區內,2020 年 3 月 29 日 02:00 掛鍾時間,由於 DST(稱為“zomertijd”或“夏令時”),時鍾跳過 1 小時,所以如果now是 14:39 掛鍾時鍾時間,從午夜開始的小時數不是 14 而是 13。

然后,您可以執行以下操作:

ZoneId zone = ...
Instant now = Instant.now();
Instant midnight = now.atZone(zone).toLocalDate().atStartOfDay(zone).toInstant();
long result = ChronoUnit.MINUTES.between(midnight, now);

確保您查詢now()一次,否則在極端情況下您可能會得到錯誤的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM