gettimeofday能够处理夏令时吗?

时间:2014-02-13 08:20:48

标签: c time

如果在我测量间隔时发生时间变化会发生什么,例如:

gettimeofday(&start, NULL);
 system("./anotherProgram");
 // during the execution of another program, time changes
 gettimeofday(&end, NULL);
 elapsed = (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000000.0;

elapsed会增加/减少一小时吗?

2 个答案:

答案 0 :(得分:0)

在Unices上,gettimeofday始终从the Epoch线性地测量时间。本地时间转换和DST与此无关,并且根本不会影响它。

但是,我现在实际上并不知道这在Windows上是怎么回事。过去,当DST切换发生时,Windows实际上改变了硬件时钟,我认为这会影响timegettimeofday返回的内容,但我不能说我知道Windows全部那很好。我也不知道是否仍然如此。

如果有的话,你可能需要注意leap seconds,但它们开始时更为罕见(更不用说它们不会影响你的程序),如果我没有记错的话, ntpd之类的东西会在一段时间内消失。然而,我对后者可能是错的。

如果您想要实际的单调增加时间,则应考虑使用clock_gettime(CLOCK_MONOTONIC, ...)代替。

答案 1 :(得分:-2)

您想要测量执行期间的时间延迟。 当您在代码elapsed = (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000000.0;中写任何时间时,它会在执行system("./anotherProgram");时显示相同的延迟。