tl; dr
ZonedDateTime.now(
ZoneId.of( "America/Montreal" )
)
…当前的默认时区…
ZonedDateTime.now(
ZoneId.systemDefault()
)
细节
在由斯坦尼斯Bshkyrtsev回答正确,直接回答你的问题。
但是,正如乔恩·斯凯特(Jon Skeet)的回答中所建议的那样,涉及的问题更大。
LocalDateTime
我找不到将纪元秒转换为LocalDateTime的方法
LocalDateTime
故意没有时区或从UTC偏移的概念。不太可能是您想要的。该Local…
机构的任何地方,不是任何一个特定地区。此类不代表时刻,而是代表大约26-27小时(全球时区范围)内的潜在时刻。
Instant
如果您要获取当前时间,则无需以纪元秒开始。获取当前Instant
。该Instant
级表示时间轴上的时刻UTC,分辨率为纳秒(最多小数的9个位数)。
Instant instant = Instant.now();
在里面Instant
是从纪元开始的纳秒数。但是我们并不在乎。
ZonedDateTime
如果您想通过特定区域的挂钟时间的镜头来查看该时刻,请应用ZoneId
来获取ZonedDateTime
。
ZoneId z = ZoneId.of( "Europe/Paris" );
ZonedDateTime zdt = instant.atZone( z );
作为快捷方式,您可以直接对进行操作ZonedDateTime
。
ZonedDateTime zdt = ZonedDateTime.now( z );
A中ZonedDateTime
有一个Instant
。调用zdt.toInstant()
以获得与UTC中的基本值相同的时间。相同数量的纳秒-因为历元任一方式,作为一个的ZonedDateTime
或作为Instant
。
给定秒数
如果您给以秒为单位的秒计数,并且该时期是UTC(1970-01-01T00:00:00Z
)中的1970年的第一时刻,则将该数字输入Instant
。
long secondsSinceEpoch = 1_484_063_246L ;
Instant instant = Instant.ofEpochSecond( secondsSinceEpoch ) ;
关于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-额外项目与其他类扩展java.time。该项目为将来可能在java.time中添加内容打下了基础。你可能在这里找到一些有用的类,比如Interval
,YearWeek
,YearQuarter
,和更多。
import java.time.{Instant, LocalDateTime, ZoneId, ZoneOffset}
?这是一个unexpected token
我在Java中11