简述
ZonedDateTime.now(
ZoneId.of( "America/Montreal" )
)
...当前默认时区...
ZonedDateTime.now(
ZoneId.systemDefault()
)
详情
Stanislav Bshkyrtsev的回答正确并直接回答了您的问题。
但是,涉及到更大的问题,正如Jon Skeet的回答所建议的那样。
LocalDateTime
我找不到将纪元秒转换为LocalDateTime
的方法
LocalDateTime
有意没有时区或UTC偏移量的概念。这不太可能是您想要的。 Local…
表示任何地点,而不是任何特定地点。该类仅表示潜在的时刻,在全球约26-27小时的时区范围内。
Instant
如果您尝试获取当前时间,则无需以时代秒为起点。获取当前的
Instant
。
Instant
类表示
协调世界时下时间轴上的一个瞬间,精度为
纳秒(最多九(9)位小数)。
Instant instant = Instant.now();
在这个 Instant
里有一个从纪元开始的纳秒计数。但我们并不真正关心它。
另请参阅 Instant 和 LocalDateTime 之间有什么区别?
ZonedDateTime
如果你想通过特定地区的墙上钟表时间来查看那一时刻,请应用 ZoneId
得到一个 ZonedDateTime
。
ZoneId z = ZoneId.of( "Europe/Paris" );
ZonedDateTime zdt = instant.atZone( z );
作为一种快捷方式,您可以直接使用
ZonedDateTime
。
ZonedDateTime zdt = ZonedDateTime.now( z );
一个
ZonedDateTime
中包含有一个
Instant
。调用
zdt.toInstant()
可以获得与
UTC中基本值相同的时间瞬间。以纳秒为单位的时代值数量是相同的,无论是
ZonedDateTime
还是
Instant
。
给定秒数的时代值
如果您已经获得了自1970年1月1日
UTC的第一刻起经过的秒数,那么请将该数字提供给
Instant
。
long secondsSinceEpoch = 1_484_063_246L ;
Instant instant = Instant.ofEpochSecond( secondsSinceEpoch ) ;
![Table of date-time types in Java, both modern and legacy.](https://istack.dev59.com/65LLv.webp)
关于 java.time
java.time 框架内置于 Java 8 及以上版本。这些类替代了老旧的 传统 日期时间类,例如 java.util.Date
、Calendar
和 SimpleDateFormat
。
想要了解更多,请查看 Oracle 教程。在 Stack Overflow 上搜索许多示例和解释。规范为 JSR 310。
Joda-Time项目现在处于维护模式,建议迁移到java.time类。
您可以直接与您的数据库交换java.time对象。使用符合JDBC 4.2或更高版本的JDBC驱动程序。无需字符串,无需java.sql.*
类。
如何获取java.time类?
ThreeTen-Extra 项目通过增加类来扩展 java.time。该项目是 java.time 可能未来添加的试验场。您可能会在这里找到一些有用的类,例如 Interval
, YearWeek
, YearQuarter
和 more。
import java.time.{Instant, LocalDateTime, ZoneId, ZoneOffset}
工作?在 Java 11 中,它对我来说是一个unexpected token
。 - Snackoverflowjava.time
的理论:https://dev59.com/PWEh5IYBdhLWcg3wYSvt#56508200 - Ondra Žižka