Java 中的 Date 类有问题。日期类返回本地机器日期,但我需要 UTC-0。
我用谷歌搜索并找到了 JavaScript 的很好的解决方案,但对于 Java 没有任何用处。
如何在 Java 8 中获取 UTC+0 日期?
使用 Java 8,您可以编写:
OffsetDateTime utc = OffsetDateTime.now(ZoneOffset.UTC);
要回答您的评论,您可以将其转换为日期(除非您依赖于遗留代码,我看不出任何原因)或自时代以来的毫秒:
Date date = Date.from(utc.toInstant());
long epochMillis = utc.toInstant().toEpochMilli();
在 java8 中,我会使用Instant
已经在UTC中并且使用方便的类。
import java.time.Instant;
Instant ins = Instant.now();
long ts = ins.toEpochMilli();
Instant ins2 = Instant.ofEpochMilli(ts)
或者,您可以使用以下内容:
import java.time.*;
Instant ins = Instant.now();
OffsetDateTime odt = ins.atOffset(ZoneOffset.UTC);
ZonedDateTime zdt = ins.atZone(ZoneId.of("UTC"));
回到Instant
Instant ins4 = Instant.from(odt);
在 Java8 中,您使用新的 Time API,并使用UTC TimeZone将Instant in 转换为ZonedDateTime
我在我的项目中做到了这一点,它就像一个魅力
Date now = new Date();
System.out.println(now);
TimeZone.setDefault(TimeZone.getTimeZone("UTC")); // The magic is here
System.out.println(now);