在Java语言中,我们可以有许多不同的方法来获取当前时间戳,但是推荐使用哪种方法:Instant.now().toEpochMilli()
还是System.currentTimeMillis()
发布于 2019-11-06 03:31:08
两个都很好。除了少数目的,这两种方法都不被推荐。
从纪元到现在,你需要毫秒做什么?
在Java中,我们可以有许多不同的方法来获取当前的时间戳,
对于当前时间戳,只需使用Instant.now()
。不需要转换为毫秒。
在Java问世之初的许多方法中,标准库中的许多方法都以自时代以来的毫秒数( long
)作为参数。然而,今天我会认为这已经过时了。看看您是否可以找到-或者创建-或者更现代的方法,例如以Instant
作为参数。要面向对象,不要使用原始的long
。它会让你的代码更清晰,更容易理解。
正如Eliott Frisch在评论中所说,如果这是用来测量流逝时间的,你可能更喜欢更高分辨率的System.nanoTime()
。
如果您确实需要从纪元开始的毫秒数
假设您有充分的理由想要计算自纪元以来的毫秒数,…
推荐使用哪个:
Instant.now().toEpochMilli()
或System.currentTimeMillis()
意见不一。有些人会说,你应该在你所有的日期和时间工作中使用java.time,现代的日期和时间应用编程接口。这将在这里暗示Instant
。Unsg java.time通常是一个好习惯,因为Java1.0和1.1中的date和time类(Date
,Calendar
,TimeZone
,DateFormat
,SimpleDateFormat
和其他)设计得很差,现在已经过时很久了,当然我们不应该再使用了。另一方面,我没有意识到System.curremtTimeMillis()
有任何特别的设计问题(除了我上面提到的使用毫秒的long
计数,这显然是Instant.now().toEpochMilli()
和System.currentTimeMillis()
的固有问题)。
如果两者之间存在细微的性能差异,我很难想象这会有什么影响。
选择在您的上下文中更具可读性且更少令人惊讶的选项。
类似的问题
发布于 2019-11-05 14:35:46
根据我的理解,Instant.now().toEpochMilli()
更好,因为Instant
已经被推荐在Java8之后使用。
此外,它基于时间线工作,而instant表示该时间线上的特定时刻。
对于java.lang.System.currentTimeMillis()
方法,它以毫秒为单位返回当前时间。该值的粒度取决于底层操作系统,并且可能更大。
因此,为了保持完全一致,请使用Instant
。
发布于 2020-05-22 11:48:40
我想补充的是,System.nanoTime()
与精度的关系不大,但更多的是与准确性有关。
System.currentTimeMillis()
基于系统时钟,在大多数情况下,系统时钟基于计算机内部的石英时钟。它是不准确的,它会漂移。(VM更糟糕,因为您没有物理时钟,并且必须与主机同步)当您的计算机将此石英时钟与全局时钟同步时,您甚至可能会发现您的时钟因为本地时钟太快或太慢而前后跳跃。
另一方面,System.nanoTime()
是基于单调时钟的。这个时钟与我们人类说话的实际时间无关。它只会以恒定的速度向前移动。它不会像石英钟那样漂移,也不需要同步。这就是为什么它是测量流逝的完美工具。
https://stackoverflow.com/questions/58705657
复制相似问题