如何在不创建新Date的情况下在Java中获取系统时间

mic*_*con 38 java memory-management date

我需要获得系统日期,Java提供new Date().getTime().

但我需要避免新的对象分配(我正在使用嵌入式系统).如何在不分配新Date对象的情况下获取系统时间?

Jon*_*eet 59

正如jzd所说,你可以使用System.currentTimeMillis.如果你需要一个Date对象,但不希望创建一个新的 Date对象,你可以使用Date.setTime重用现有的Date对象.就个人而言,我讨厌Date可变的事实,但在这种特殊情况下,它可能对你有用.同样,Calendar有一个setTimeInMillis方法.

如果可能的话,最好只保留它作为一个long.如果您只需要有效的时间戳,那么这将是最好的方法.


jzd*_*jzd 50

这应该工作:

System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)


Mar*_*iot 11

你可以用System.currentTimeMillis().

至少在OpenJDK中,Date使用它在封面下.

调用System是一个原生的JVM方法,所以我们不能肯定地说没有分配发生的事情,尽管这里似乎不太可能.


Ara*_*ram 7

使用System.currentTimeMillis()System.nanoTime().

  • 来自关于 nanoTime() 的文档:此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。返回的值表示自某个固定但任意的时间以来的纳秒(可能在未来,因此值可能为负)。此方法提供纳秒精度,但不一定提供纳秒精度。不保证值的更改频率。由于数值溢出,跨越大约 292 年(263 纳秒)的连续调用之间的差异将无法准确计算经过的时间。 (2认同)