tl; dr
您要求以毫秒为单位来表示当前时间的秒数(不计历元)。
Instant.now() // Get current moment in UTC, then…
.get( ChronoField.MILLI_OF_SECOND ) // interrogate a `TemporalField`.
2017-04-25T03:01:14.113Z→ 113
- 获得分数秒,以纳秒为单位(十亿)。
- 除以一千以截断毫秒。
看到此代码在IdeOne.com上实时运行。
使用java.time
现代的方法是使用java.time类。
在UTC中捕获当前时刻。
Instant.now()
使用该Instant.get
方法查询a的值TemporalField
。在我们的情况下,TemporalField
我们想要的是ChronoField.MILLI_OF_SECOND
。
int millis = Instant.now().get( ChronoField.MILLI_OF_SECOND ) ; // Get current moment in UTC, then interrogate a `TemporalField`.
或者自己做数学。
您更有可能要求特定的时区。几分之一秒的时间可能与s相同,Instant
但是时区有很多异常,我犹豫做出这个假设。
ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) ;
询问小数秒。Question要求毫秒,但是java.time类使用的分辨率更高,只有纳秒。这意味着纳秒数的范围从0到999,999,999。
long nanosFractionOfSecond = zdt.getNano();
如果您确实需要毫秒,请通过除以一百万来截断更精细的数据。例如,半秒是500,000,000纳秒,也是500毫秒。
long millis = ( nanosFractionOfSecond / 1_000_000L ) ; // Truncate nanoseconds to milliseconds, by a factor of one million.
关于java.time
该java.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.Date
,Calendar
,和SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参见Oracle教程。。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
在哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。你可能在这里找到一些有用的类,比如Interval
,YearWeek
,YearQuarter
,和更多。
[0, 999]
,对吗?@thinksteep阅读了最后一句话。