我试图从Date
获得微秒,但我不能。
Date date = new Date()
答案 0 :(得分:16)
不,Date
仅存储毫秒精度的值。如果你想要微秒级的精确度,你可能希望将JSR-310或java.sql.Timestamp视为一种黑客攻击 - 但不要指望任何内置类,例如Calendar
和DateFormat
处理超过毫秒的任何事情。
如果您正在尝试执行计时(例如进行基准测试),则应使用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文档中获得。