简而言之
Instant.now()
避免使用旧版日期时间类
您正在使用已被java.time类所取代的麻烦的旧日期时间类。不需要使用DateFormat
、Calendar
或Timestamp
。
如果必须与尚未更新为java.time的旧代码中的Calendar
交互,请使用添加到旧类中的新方法进行转换。提取过时的java.util.Date
并将其转换为Instant
。
Instant instant = myCal.getTime().toInstant() ;
使用 java.time
获取当前时刻作为一个 Instant
。Instant
类表示一个时间线上的时刻,以 UTC 为基准,分辨率为 纳秒(最多九位小数)。
Instant instant = Instant.now() ;
2017-02-17T03:29:15.725Z
数据库
从JDBC 4.2及更高版本开始,您可以直接将Instant
对象与数据库交互,因此不需要过时的java.sql.Timestamp
。
myPreparedStatement.setObject( … , instant ) ;
和检索:
Instant instant = myResultSet.getObject( … , Instant.class ) ;
从纪元开始计数
显然,您想要自纪元参考日期以来的毫秒数,该日期为1970-01-01T00:00:00Z
。您可以从Instant
中提取该数字。但请注意数据丢失,因为Instant
的分辨率为纳秒,您将截断为毫秒。
long millis = instant.toEpochMilli() ;
1487302155725
关于java.time
java.time框架是Java 8及更高版本中内置的。这些类取代了旧的、令人头疼的legacy日期时间类,如java.util.Date
、Calendar
和SimpleDateFormat
。
Joda-Time项目现在处于维护模式,建议迁移到java.time类。
想要了解更多,请参见Oracle教程。同时,在Stack Overflow上搜索许多示例和解释。规范是JSR 310。
在哪里获取java.time类?
这个
ThreeTen-Extra 项目扩展了 java.time 的附加类。该项目是 java.time 可能未来增加内容的试验场。您可能会在此处找到一些有用的类,例如
Interval
、
YearWeek
、
YearQuarter
和
更多。
Calendar
实例,然后我必须从中获取UTC时间戳。我喜欢Joda Time,但我不能在这里使用它。 - JonasgetTime()
- 这将给你一个UTC时间戳。 - Jon Skeet