是Windows系统时间可能偶尔撤退吗

时间:2019-05-16 14:12:54

标签: windows spring-boot operating-system

Spring boot项目,记录保存2个DB所需的时间,

long start = System.currentTimeMillis();    
getDao().batchInsert(batchList);
long end = System.currentTimeMillis();
log.info("Save {} data 2 DB successfully took time: {}", getDescName(), (end - start));    

很奇怪,我发现时间成本为负,见下文

2019-05-16 14:41:04.420  INFO 3324 --- [ave2db-thread-2] c.c.sz_vss.demo.AbstractSave2DBProcess   : Save Stock data 2 DB batch size: 416
2019-05-16 14:41:03.152  INFO 3324 --- [ave2db-thread-2] c.c.sz_vss.demo.AbstractSave2DBProcess   : Save Stock data 2 DB successfully took time: -1268

为什么会这样?它是Spring Boot日志系统错误吗?还是Windows系统时间可能偶尔撤退?

1 个答案:

答案 0 :(得分:0)

网络时间同步可以在任一方向上进行校正,因此,系统日历可以向后移动。此外,在观察夏令时的时区中,您每年还会看到+/- 1小时的中断。

这就是为什么不建议使用系统日历来测量经过时间的原因。有单调计时器(在Windows上,QueryPerformanceCounter()QueryPerformanceFrequency()组合,在POSIX(如Linux)上是clock_gettime(CLOCK_MONOTONIC))。托管框架通常将它们包装在名为“ Stopwatch”的对象中。