首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >推荐使用哪个:Instant.now()、.toEpochMilli()或System.currentTimeMillis()

推荐使用哪个:Instant.now()、.toEpochMilli()或System.currentTimeMillis()
EN

Stack Overflow用户
提问于 2019-11-05 14:31:32
回答 3查看 11.3K关注 0票数 17

在Java语言中,我们可以有许多不同的方法来获取当前时间戳,但是推荐使用哪种方法:Instant.now().toEpochMilli()还是System.currentTimeMillis()

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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类(DateCalendarTimeZoneDateFormatSimpleDateFormat和其他)设计得很差,现在已经过时很久了,当然我们不应该再使用了。另一方面,我没有意识到System.curremtTimeMillis()有任何特别的设计问题(除了我上面提到的使用毫秒的long计数,这显然是Instant.now().toEpochMilli()System.currentTimeMillis()的固有问题)。

如果两者之间存在细微的性能差异,我很难想象这会有什么影响。

选择在您的上下文中更具可读性且更少令人惊讶的选项。

类似的问题

票数 10
EN

Stack Overflow用户

发布于 2019-11-05 14:35:46

根据我的理解,Instant.now().toEpochMilli()更好,因为Instant已经被推荐在Java8之后使用。

此外,它基于时间线工作,而instant表示该时间线上的特定时刻。

对于java.lang.System.currentTimeMillis()方法,它以毫秒为单位返回当前时间。该值的粒度取决于底层操作系统,并且可能更大。

因此,为了保持完全一致,请使用Instant

票数 4
EN

Stack Overflow用户

发布于 2020-05-22 11:48:40

我想补充的是,System.nanoTime()与精度的关系不大,但更多的是与准确性有关。

System.currentTimeMillis()基于系统时钟,在大多数情况下,系统时钟基于计算机内部的石英时钟。它是不准确的,它会漂移。(VM更糟糕,因为您没有物理时钟,并且必须与主机同步)当您的计算机将此石英时钟与全局时钟同步时,您甚至可能会发现您的时钟因为本地时钟太快或太慢而前后跳跃。

另一方面,System.nanoTime()是基于单调时钟的。这个时钟与我们人类说话的实际时间无关。它只会以恒定的速度向前移动。它不会像石英钟那样漂移,也不需要同步。这就是为什么它是测量流逝的完美工具。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58705657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档