如何在Java 8中获得UTC + 0日期?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Java 8中获得UTC + 0日期?相关的知识,希望对你有一定的参考价值。

我在Java中遇到Date类问题。 Date类返回本地机器日期,但我需要UTC-0。

我用Google搜索并找到了很好的javascript解决方案,但对Java来说没用。

如何在Java 8中获得UTC + 0日期?

答案

使用Java 8,您可以编写:

OffsetDateTime utc = OffsetDateTime.now(ZoneOffset.UTC);

要回答您的评论,您可以将其转换为日期(除非您依赖遗留代码,我没有看到任何理由)或者从时代开始将其转换为millis:

Date date = Date.from(utc.toInstant());
long epochMillis = utc.toEpochSecond() * 1000;
另一答案

tl;dr

Instant.now()

java.time

与最早版本的Java捆绑在一起的麻烦的旧日期时间类已被Java 8及更高版本中内置的java.time类所取代。见Oracle Tutorial。大部分功能已经被移植到ThreeTen-Backport的Java 6和7中,并在ThreeTenABP中进一步适应了android

Instant

Instant代表UTC时间轴上的一个时刻,分辨率高达nanoseconds

Instant instant = Instant.now();

toString方法使用标准ISO 8601格式之一生成一个String对象,其中的文本表示日期时间值。

String output = instant.toString();  

2016-06-27t 19:15:兄弟.864克

Instant类是java.time中的基本构建块类。在处理日期时间时,这应该是您的首选课程,因为通常最佳做法是以UTC格式跟踪,存储和交换日期时间值。

OffsetDateTime

Instant有一些限制,例如没有用于生成替代格式字符串的格式化选项。要获得更多灵活性,请将Instant转换为OffsetDateTime。指定offset-from-UTC。在java.time中,这意味着一个ZoneOffset对象。在这里,我们希望坚持使用UTC(+00),以便我们可以使用方便的常量ZoneOffset.UTC

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );

2016-06-27t 19:15:兄弟.864克

或者跳过Instant课程。

OffsetDateTime.now( ZoneOffset.UTC )

现在有一个OffsetDateTime对象,你可以使用DateTimeFormatter创建具有替代格式文本的String对象。搜索Stack Overflow以获取使用DateTimeFormatter的许多示例。

ZonedDateTime

当你想在某个特定的时区显示wall-clock time时,使用ZoneId来获得ZonedDateTime

在此示例中,我们应用蒙特利尔时区。在夏天,在Daylight Saving Time (DST)胡说八道,该区域有-04:00的偏移。所以请注意输出中的时间是四小时,15而不是19小时。 InstantZonedDateTime都代表了同一时刻,只是通过两个不同的镜头观看。

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );

2016-06-27T15:15:25.864-04:00 [美国/蒙特利尔]

转换

虽然您应该避免使用旧的日期时间类,但是如果必须可以使用添加到旧类的新方法进行转换。在这里,我们使用java.util.Date.from( Instant )java.util.Date::toInstant

java.util.Date utilDate = java.util.Date.from( instant );

走向另一个方向。

Instant instant= utilDate.toInstant();

同样,寻找添加到GregorianCalendarCalendar的子类)的新方法来转换为java.time.ZonedDateTime和从java.time转换。


About java.time

legacy框架内置于Java 8及更高版本中。这些类取代了麻烦的旧java.util.Date日期时间类,如CalendarSimpleDateFormatJoda-Time

现在在maintenance modejava.time项目建议迁移到Oracle Tutorial班。

要了解更多信息,请参阅JSR 310。并搜索Stack Overflow以获取许多示例和解释。规格是JDBC driver

您可以直接与数据库交换java.time对象。使用符合JDBC 4.2或更高版本的java.sql.*。不需要字符串,不需要Java SE 8类。

从哪里获取java.time类?

Interval项目使用其他类扩展了java.time。该项目是未来可能添加到java.time的试验场。你可能会在这里找到一些有用的类,如YearWeek,<

以上是关于如何在Java 8中获得UTC + 0日期?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ZonedDateTime 或 Java 8 将任何日期时间转换为 UTC

来自 ZonedDateTime UTC 实例的 Java 日期和时间戳

将输入字符串日期时间从不同时区转换为UTC

Python - 给定一个时区感知的日期时间对象,我如何获得一个时区朴素的 UTC 日期时间对象?

如何使本地日期时区等于 (+8) 到服务器时区 (UTC) 。节点 js 和 AWS

Java时间格式转换,如何获得时区?