推荐哪一个:Instant.now().toEpochMilli() 或 System.currentTimeMillis()

在Java中,我们可以有许多不同的方法来获取当前时间戳,但建议使用哪一种:或Instant.now().toEpochMilli()System.currentTimeMillis()


答案 1

两者都很好。除了少数目的外,两者都不建议这样做。

自纪元以来,您需要毫秒来做什么?

在Java中,我们可以有许多不同的方法来获取当前时间戳,

对于当前时间戳,只需使用 .无需转换为毫秒。Instant.now()

Java最初几年的许多方法,也包括标准库中的许多方法,自时代以来就花费了几毫秒作为参数。然而,今天我认为这是老式的。看看你是否能找到——或者创建——或者更现代的方法,例如用as参数代替。走向面向对象,不要使用基元。它将使您的代码更清晰,更不言自明。longInstantlong

正如 Eliott Frisch 在评论中所说,如果这是为了测量经过的时间,您可能更喜欢 的更高分辨率。System.nanoTime()

如果自纪元以来确实需要毫秒

假设您有充分的理由想要自纪元以来的毫秒数,...

哪一个是推荐的:或[?]Instant.now().toEpochMilli()System.currentTimeMillis()

意见不一。有人会说,你应该使用java.time,现代日期和时间API,用于所有日期和时间工作。这意味着这里。Unsg java.time通常是一个好习惯,因为Java 1.0和1.1(,,等)的日期和时间类设计不佳,现在已经过时了,当然我们不应该再使用任何应该使用的东西。另一方面,我特别不知道任何设计问题(除了我上面提到的关于使用毫秒数的内容,这显然是两者固有的 和 )。InstantDateCalendarTimeZoneDateFormatSimpleDateFormatSystem.curremtTimeMillis()longInstant.now().toEpochMilli()System.currentTimeMillis()

如果两者之间有轻微的性能差异,我很难想象这很重要的情况。

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

类似问题


答案 2

根据我的理解是更好的,因为Java-8以后的使用已被推荐。Instant.now().toEpochMilli()Instant

此外,它基于时间轴工作,即时表示该时间轴上的特定时刻。

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

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