根据廖雪峰教学博客,java 中处理日期 /时间问题,如无特殊必要应优先采用较新的 java.time 模块。
一个疑问是,写码时常见需求是获取两点之间执行时间。按照该博客说明,精度最高的应该是 Instant 类,所以计算两点间代码执行时间应该可以使用下列代码:
public class Main {
public class void Main() {
var start = Instant.now();
// ... run some code
System.out.println("done");
var end = Instant.now();
System.out.println(instantToDouble(end) - instantToDouble(start));
}
protected static double instantToDouble(Instant instant) {
return instant.getEpochSecond() + instant.getNano() / 1e9;
}
}
实际得到结果两点间差值是 0.0 ,两个 instant 获得的时间完全一致,让人疑惑因为 instant 理论上是纳秒级精度,而两点之间执行了 sout 代码,sout 根据廖旭峰的说明是一个同步 IO ,所以理论上上述代码不应该输出 0 ,导致它输出 0 的原因是什么呢? instant 精度不够吗,或者 io 流的问题?
另外再顺便问下 instant 是什么设计,导入是通过 import java.time.*导入的,正常来说创建对象应该是用类似 var instant = new Instant().now();这种感觉的句子,为什么 instant 可以直接 var instant = Instant.now()?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.