【问题标题】:How to get the microseconds from a Date?如何从日期中获取微秒?
【发布时间】:2012-02-04 03:10:16
【问题描述】:

我正在尝试从 Date 获取微秒,但我做不到。

Date date = new Date()

【问题讨论】:

标签: java datetime date


【解决方案1】:

不,Date 只存储毫秒精度的值。如果您想要微秒级精度,您可能希望将JSR-310java.sql.Timestamp 视为一个小技巧——但不要指望任何内置类(如CalendarDateFormat)能够处理任何超过毫秒的时间。

如果您尝试执行计时(例如用于基准测试),您应该使用System.nanoTime,但这应该用于类似秒表的用例 -它不会以有意义的方式为您提供“当前挂钟时间”。

【讨论】:

  • 您可以在 API 链接之后查看示例。
  • @SalmanRaza:当我们不知道你想要达到什么目标时,很难举个例子。
  • 我正试图在一个单独的变量中实现这次“2012-01-03 12:50:49”的微秒部分!
  • @SalmanRaza:那个时间的微秒部分只是 0。目前还不清楚你真正想要做什么 - 找到 current 时间到微秒精度,或读取一些 other 日期/时间到微秒精度。如果是后者,该时间存储在哪里,如何存储?
  • @SalmanRaza:DateCalendar 都没有提供这种精确度,Java 中没有任何东西可以为您提供这种精确度的当前日期/时间。 Timestamp 可以表示小到纳秒的值,但通常该值由数据库提供。
【解决方案2】:

我所做的是定期查找 currentTimeMillis 和 nanoTime() 之间的差异(因为这会漂移很多),并使用 nanoTime() + OFFSET 作为 currentTimeNS。 (更具体地说,我使用 RDTSC 机器代码指令,它带有更多的小问题;)

但是,随着时间的推移,它不如 currenTimeMillis() 准确,而 currenTimeMillis() 本身可以在一小时内漂移许多毫秒。

只有了解它的局限性,它才会真正有用。

【讨论】:

    【解决方案3】:

    要以微秒为单位测量时间,您需要使用 System.nanoTime() 函数,该函数将根据系统可用的最准确时钟返回以微秒为单位的时间。

    对用户而言,这与 System.currentTimeMilis() 毫秒的作用几乎相同,您只需定义开始时间和结束时间,然后将差异取反,即可了解操作花费了多长时间。例如:

    long startTime = System.nanoTime();
    //Do some kind of processing; 
    //loop, IO, whatever you want to measure
    long endTime = System.nanoTime();
    long elapsedTime = endTime - startTime;
    

    最后一点可以省略,为了简单起见,我把它写得很冗长:

    long elapsedTime = System.nanoTime() - startTime;
    

    这不应该用于测量实时,因为它几乎没有意义或保证它甚至可以与之相提并论。以上所有信息都可从System 的 Java API 文档中获得。

    【讨论】:

      猜你喜欢
      • 2017-10-29
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      相关资源
      最近更新 更多