相当于 Java 8 中的 new Date().getTime()

Equivalent of new Date().getTime() in Java 8

在 Java 8 之前,我在代码中使用 new Date().getTime() 来获取当前时间戳作为数字。我可以假设 Instant.now().toEpochMilli() 等同于传统方式是安全的吗?它是否具有完全相同的行为和相似的性能特征?有没有更好的选择?

我想在周围所有组件仍然使用new Date().getTime()的生态系统中使用Java 8方式,所以产生的结果必须是一致的。

所有 Instant.now().toEpochMilli()new Date().getTime()System.currentTimeMillis() 都会给出自纪元以来的毫秒数。

从CPU功率和内存分配的角度来看,您应该使用System.currentTimeMillis(),因为它是一种将任务委托给底层操作系统的本地方法(这种计算通常是非常优化的并且不会'需要垃圾回收等)。

两个选项

  1. Instant.now().toEpochMilli(),如你所说
  2. System.currentTimeMillis() 正如 Andy Turner 和 Marteng 所说

两者之间的选择取决于品味。 InstantDate 的现代替代品,也是许多人的自然选择。如果您想给人以现代印象,请使用它。 System.currentTimeMillis()Date 一样大。虽然 Date 显然设计不佳,应该始终避免,但我不知道 System.currentTimeMillis().

有任何设计问题

更现代:保留 Instant

使用 long 来表示时间点是非常低级的并且很难调试,因为我们不会自然地为数字赋予任何意义。如果可以,不要保留数字,而是保留 Instant。它还为您提供比毫秒更精细的分辨率(因为 Java 9 Instant.now() 在许多平台上具有微秒的精度)。

安全且高效?

Can I assume that Instant.now().toEpochMilli() is safe equivalent to the legacy way? Does it have exactly the same behavior and similar performance characteristics?

是的,它是安全的,等效的,并且具有相似的性能特征。

只有在任何情况下都要避免 DateCalendar。它们设计不佳且早已过时,但有现代替代品。