【发布时间】:2014-04-05 04:51:02
【问题描述】:
我刚开始使用Joda-Time,遇到了一些看起来很奇怪的东西。
当我睡眠 1 毫秒并在睡眠前后调用 getMillisOfDay() 时,Joda-Time 告诉我已经过去了 119 毫秒。使用 java.util.Date (在睡眠前后创建一个实例,并获取每个返回的 getTime() 值的差异)报告的经过时间值要小得多(2 毫秒)。这比 1 毫秒的实际睡眠时间长,但我猜测创建 Date 的对象开销会产生影响,无论如何报告 java.util.Date 的经过时间远低于 Joda-Time 报告的时间.)
这是我的小测试方法:
@Test(enabled = true)
public void testsleep() {
LocalDateTime now = new LocalDateTime();
System.out.println("jodatime before millisecs:" + now.getMillisOfDay());
Thread.sleep(1);
LocalDateTime now2 = new LocalDateTime();
System.out.println("jodatime after millisecs:" + now2.getMillisOfDay());
System.out.println("java.util.DATE before call:" + new Date().getTime());
Thread.sleep(1);
Date after = new Date();
System.out.println("java.util.DATE after call:" + after.getTime());
println "done"
}
输出:
jodatime before millisecs:76672505
jodatime after millisecs:76672624
java.util.DATE before call:1396671472633
java.util.DATE after call:1396671472635
分析:
jodatime after millisecs:76672624
jodatime before millisecs:76672505
----------------
119 millisecs elapsed according to joda time
java.util.DATE after call:1396671472635
java.util.DATE before call:1396671472633
----------------
2 millisecs elapsed according to java util Date
我认为 Joda-Time 比 java.util.Date 更好。好吧,我敢肯定,我只是用错了。但我不明白怎么做。非常感谢任何建议!
【问题讨论】:
-
没有像
LocalDateTime这样的类是 Joda-Time。你的意思是DateTime还是LocalTime?请说明,因为您提出了一个奇怪的问题。 -
谢谢安东尼。我站得更正了。
LocalDateTimeis an unmodifiable datetime class representing a datetime without a time zone. -
不足为奇:
new Date()比new LocalDateTime()轻得多,因此存在差异。但是,Anthonys 的替代方案确实更适合进行基准测试。 -
仅供参考,看看Java Microbenchmark Harness (JMH) 工具。 JEP 230 建议将此添加到 OpenJDK。