2012-01-06 75 views
2

我想从Date微秒,但我不能。如何从日期获得微秒?

Date date = new Date() 
+0

请问你能解释多一点 – RanRag 2012-01-06 11:16:03

+0

可能重复的[当前时间以微秒在java](http://stackoverflow.com/questions/1712205/current-time-in-microseconds-in-java) – dogbane 2012-01-06 11:16:57

+1

添加一个“喊”编辑并没有真正帮助你的问题... – 2012-01-10 07:10:02

回答

15

不,Date只存储以毫秒为准的值。如果你想精确到微秒,你可能想要看看JSR-310java.sql.Timestamp是否有点瑕疵 - 但不要指望任何内建的类如CalendarDateFormat能够处理超过毫秒的任何内容。

如果你想执行时机(如基准),你应该使用System.nanoTime,但应该只用于秒表般的使用情况 - 它给你“当前wallclock时间“以一种有意义的方式。

+0

稍多一些例子或一些示例代码将会有帮助 – 2012-01-06 11:20:30

+0

你可以看到下面的链接到API的例子。 – Artem 2012-01-06 11:23:30

+3

@SalmanRaza:当我们不知道你想达到什么时,很难举一个例子。 – 2012-01-06 11:36:36

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文档获得。

2

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

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

只有了解它的局限性,它才会非常有用。