我有一個 ZonedDatetime 的實體。
ZonedDateTime.now(ZoneId.of("America/New_York"))
我基本上需要一個函式來獲取 ZonedDateTime 的實體并回傳接下來的 1 分鐘和 5 分鐘值。
所以如果當前時間是:
2021-10-24T19:46:10.649817
下一分鐘將是19:47:00,接下來的 5 分鐘將是19:50:00
接下來的 5 分鐘間隔總是像:
1:00
1:05
1:10
1:15
1:20
1:25
...
1:50
1:55
2:00
即接下來的 5 分鐘間隔不是基于從現在開始的 5 分鐘,而是基于從小時開始的接下來的 5 分鐘。未來的下一個 1 分鐘間隔也是如此。
def nextIntervals(zdt: ZonedDateTime): (ZonedDateTime, ZonedDateTime) = {
???
}
uj5u.com熱心網友回復:
這樣做相當簡單,無需對值進行硬編碼。不幸的是,我對 scala 不熟悉,所以我會給你一些偽代碼,我相信你會很容易翻譯它。
nextIntervals(zdt) {
timestamp = zdt.toUnixTimestamp();
return [
new ZonedDateTime(timestamp (60 - timestamp % 60)),
new ZonedDateTime(timestamp (300 - timestamp % 300))
]
}
上面的代碼假設ZonedDateTime可以通過給它一個unix時間戳來實體化,以秒為單位。而且它可以轉換為unix時間戳。
這個想法非常簡單:模數的剩余部分將是自上次所需時間段(在您的情況下為 1 分鐘或 5 分鐘)以來經過的時間。把它從這個時期本身拿走,你就有了到下一個時期的時間。將其添加到當前時間,您將獲得確切的日期時間。
編輯:
這是一個有效的 javascript 示例
function nextIntervals(date) {
let t = date.getTime();
return [
60e3,
300e3,
].map(i => new Date(t i - t % i));
}
console.log(nextIntervals(new Date));
uj5u.com熱心網友回復:
手動執行計算可能容易出錯。此外,如果您已經有一個標準 API 可以為您執行計算,那么手動執行計算是沒有意義的。我建議您ZonedDateTime.#plusMinutes根據您的要求使用。
演示:
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
ZonedDateTime now = ZonedDateTime.now(ZoneId.of("America/New_York"));
ZonedDateTime afterOneMin = now.plusMinutes(1);
ZonedDateTime afterFiveMin = now.plusMinutes(5);
System.out.println(now);
System.out.println(afterOneMin);
System.out.println(afterFiveMin);
}
}
輸出:
2021-10-25T08:33:42.132385-04:00[America/New_York]
2021-10-25T08:34:42.132385-04:00[America/New_York]
2021-10-25T08:38:42.132385-04:00[America/New_York]
ONLINE DEMO
從Trail: Date Time 中了解有關現代日期時間 API 的更多資訊。檢查此答案和此答案以了解如何將java.timeAPI 與 JDBC結合使用。
注:該java.util日期時間API及API格式,SimpleDateFormat都已經過時,而且容易出錯。建議完全停止使用它們并切換到現代 Date-Time API *。
* 如果您正在為 Android 專案作業并且您的 Android API 級別仍然不符合 Java-8,請檢查通過 desugaring 可用的 Java 8 API。請注意,Android 8.0 Oreo 已提供對java.time.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/336039.html
