为何多次调用createDate()生成的Date.getTime()结果存在毫秒差异?
为什么多次创建的Date对象getTime()有毫秒差异?
嘿,这个问题我之前调试代码时也碰到过,其实核心原因很简单——每次调用createDate()方法本身是需要消耗时间的,系统时钟会在这期间前进几毫秒!
咱们来拆解一下:
- Java里的
java.util.Date(你用的应该是这个)的getTime()返回的是从1970-01-01 UTC到对象创建时刻的毫秒数,它直接依赖系统的当前时钟。 - 你连续调用了四次
createDate(),哪怕这个方法只是简单的return new Date();,JVM执行方法调用、分配对象内存这些操作都需要一点点CPU时间。第一次调用和第二次之间的耗时让系统时钟跳了48毫秒(从1572794103293到1572794103341),而后面三次调用因为执行得太快,系统时钟还没来得及更新,所以返回了同一个毫秒值。
如果你的createDate()方法里还有额外逻辑(比如解析日期字符串、做时间计算),那这个时间差会更明显。
解决办法:如果需要一致的时间戳
如果你希望所有Date对象的时间戳完全相同,可以先一次性获取当前时间,再复用这个值:
long currentTimestamp = System.currentTimeMillis(); Date date = new Date(currentTimestamp); Date date2 = new Date(currentTimestamp); Date date3 = new Date(currentTimestamp); Date date4 = new Date(currentTimestamp); // 现在所有date的getTime()结果都会完全一致
内容的提问来源于stack exchange,提问作者Tokishiro
相关产品推荐
相关产品推荐

