我有以下一段代碼。我想獲得10天前的整點時間的紀元值t,在當前時間。但是當我使用https://www.epochconverter.com/將t轉換回一個日期/時間時,列印出來的結果的時間并不正確。我遺漏了什么?
long t = localDateTime.now()
.minusDays(10)
.toEpochSecond(ZoneOffset.UTC) * 1000;
System.out.println(t)。
uj5u.com熱心網友回復:
我建議你使用OffsetDateTime.now(ZoneOffset.UTC)來獲得UTC中的當前日期時間,然后從中減去10天。最后,從得到的OffsetDateTime中獲取紀元秒。
import java.time.OffsetDateTime。
import java.time.ZoneOffset;
public class Main {
public static void main(String[] args) {
System.out.println(OffsetDateTime.now(ZoneOffset.UTC).minusDays(10).toEpochSecond()) 。
}
輸出:
1631350741。
。
從現代日期時間API*了解更多關于Trail: 日期時間.
* 出于任何原因,如果你必須堅持使用Java 6或Java 7,你可以使用ThreeTen-Backport,它將大部分的java.time功能回傳到Java 6 & 7。如果您正在為一個 Android 專案作業,而您的 Android API 水平仍然不符合 Java-8 的要求,請查看通過脫ugaring 提供的 Java 8 API和如何在 Android 專案中使用 ThreeTenABP。
uj5u.com熱心網友回復:
所以LocalDateTime是表示你當前時區的時間,然后你在UTC時區獲得從紀元開始的秒數。 但是,這并不是將時間轉換為UTC,而是保持不變,所以如果現在是當地時間下午6點,這將產生一個下午6點的UTC時間。
你需要做的是考慮到時區的因素。 以下每個陳述句將列印相同的值(以秒為單位),當我將它們插入https://www.epochconverter.com時,它們將給出它們生成時的正確 "當地時間"。
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.TimeZone。
public class Test {
public static void main(String[] args) {
TimeZone tz = TimeZone.getDefault()。
ZoneOffset offset = tz.toZoneId().getRules().getStandardOffset(Instant.now())。
long t = LocalDateTime.now()
.minusDays(10)
.toEpochSecond(offset)。
System.out.println(t);
System.out.println(ZonedDateTime.now().minusDays(10).toEpochSecond() )。
System.out.println(OffsetDateTime.now(ZoneOffset.UTC).minusDays(10).toEpochSecond() ) 。
}
可能還有一些方法,但這些是我的基本方法。
因此,例如,我得到了一個1631350948的輸出,當我把它插入轉換時,它列印了
GMT: 2021年9月11日,星期六,上午9:02:28 你的時區。星期六。 2021年9月11日 7:02:28 PM GMT 10:00
相對于:10天之前
"當地時間 "在我對輸出進行采樣時是正確的
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/328871.html
標籤:
