【问题标题】:How to get system time in Java without creating a new Date如何在不创建新日期的情况下在 Java 中获取系统时间
【发布时间】:2011-06-19 07:37:44
【问题描述】:

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

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

【问题讨论】:

    标签: java date memory-management


    【解决方案1】:

    正如 jzd 所说,您可以使用System.currentTimeMillis。如果您需要它in Date 对象但不想创建 Date 对象,您可以使用 Date.setTime 重用现有的 @987654325 @ 目的。我个人讨厌Date 是可变的这一事实,但也许在这种特殊情况下它对你有用。同样,Calendar 有一个setTimeInMillis 方法。

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

    【讨论】:

      【解决方案2】:

      这应该可行:

      System.currentTimeMillis();
      

      【讨论】:

        【解决方案3】:

        您可以使用System.currentTimeMillis()

        至少在 OpenJDK 中,Date 在幕后使用了它。

        System 中的调用是对本机 JVM 方法的调用,因此我们不能确定没有分配发生在幕后,尽管这里似乎不太可能。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • 来自 nanoTime() 的文档:此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。返回的值表示自某个固定但任意时间以来的纳秒(可能在将来,因此值可能为负数)。此方法提供纳秒精度,但不一定提供纳秒精度。不保证值的变化频率。由于数值溢出,超过大约 292 年(263 纳秒)的连续调用的差异将无法准确计算经过的时间。
          • 我相信@AaronF 的意思是 2^63 纳秒。 :-)
          • @pianoJames 是的。这很尴尬。给了我一个笑声。感谢您的评论。
          猜你喜欢
          • 1970-01-01
          • 2015-10-10
          • 2021-04-08
          • 2014-01-23
          • 1970-01-01
          • 2023-03-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多