tl;dr
Instant.ofEpochMilli( 1_372_916_493_000L ) // Moment on timeline in UTC.
2013年7月4日05:41:33 Z
...和...
Instant.ofEpochMilli( 1_372_916_493_000L ) // Moment on timeline in UTC.
.atZone( ZoneId.of( "Europe/Berlin" ) ) // Same moment, different wall-clock time, as used by people in this region of Germany.
日期时间类已经过时,现在应该使用java.time类。
java.time
如果您有从UTC时间1970年1月1日的第一刻开始计算的毫秒数,那么请将其解析为
Instant
。
Instant
类表示
UTC上时间线上的一个瞬间,分辨率为
纳秒(小数点后最多九位数字)。
Instant instant = Instant.ofEpochMilli( 1_372_916_493_000L ) ;
翻译如下:
instant.toString(): 2013-07-04T05:41:33Z
通过应用时区(ZoneId),可以从特定区域的挂钟时间的角度看到同一时刻,得到一个ZonedDateTime。
ZoneId z = ZoneId.of( "Europe/Berlin" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
zdt.toString():2013年7月4日07:41:33+02:00[欧洲/柏林]
关于java.time
java.time框架内置于Java 8及以后版本中。这些类替代了旧的传统日期时间类,如java.util.Date
、Calendar
和SimpleDateFormat
。
Joda-Time项目现处于维护模式,建议迁移到java.time类。
要了解更多,请查看
Oracle教程。并在Stack Overflow上搜索许多示例和解释。规范是
JSR 310。
从哪里获取java.time类?
java.util.Date
、java.util.Calendar
和java.text.SimpleDateFormat
这样的老旧日期时间类现在已经过时,被java.time类所取代。大部分java.time功能已经移植到Java 6和Java 7中,在ThreeTen-Backport项目中实现。还有一个专门为早期Android版本适配的ThreeTenABP项目。请参阅如何使用ThreeTenABP...。 - Basil Bourque