如何从日期获得微秒?

时间:2012-01-06 11:14:25

标签: java datetime date

我试图从Date获得微秒,但我不能。

Date date = new Date()

3 个答案:

答案 0 :(得分:16)

不,Date仅存储毫秒精度的值。如果你想要微秒级的精确度,你可能希望将JSR-310java.sql.Timestamp视为一种黑客攻击 - 但不要指望任何内置类,例如CalendarDateFormat处理超过毫秒的任何事情。

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

答案 1 :(得分:2)

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

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

只有了解其局限性才真正有用。

答案 2 :(得分:1)

要测量以微秒为单位的时间,您需要使用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文档中获得。