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

Mic*_*das 5 java timestamp java-time

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

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

Mar*_*eng 7

所有的Instant.now().toEpochMilli()new Date().getTime()并且System.currentTimeMillis()会给你的毫秒数,因为时代。

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


Ole*_*.V. 5

两种选择

  1. Instant.now().toEpochMilli(), 如你所说
  2. System.currentTimeMillis() 正如安迪·特纳和马腾所说

两者之间的选择是一个品味问题。InstantDate许多自然选择的现代替代品。如果您想给人现代感,请使用它。System.currentTimeMillis()和 一样古老Date。虽然Date它的设计显然很糟糕,应该始终避免使用,但我不知道System.currentTimeMillis().

更现代:保持即时

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

安全和性能?

我可以假设这Instant.now().toEpochMilli()与传统方式一样安全吗?它是否具有完全相同的行为和相似的性能特征?

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

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