2
#include <cstdio>

#include "boost/date_time/posix_time/posix_time.hpp"

int main(int argc, char** argv) {
  boost::posix_time::ptime start =
      boost::posix_time::microsec_clock::local_time();

  uint32_t iterations = 0;

  // Do a bunch of work. `iterations` becomes > 0

  boost::posix_time::ptime now =
     boost::posix_time::microsec_clock::local_time();
  boost::posix_time::time_duration diff = now - start;
  printf("Milliseconds per iteration: %f\n",
      static_cast<float>(diff.total_milliseconds()) / iterations);

  return 0;
}

这打印出一个负值。怎么会这样?

4

1 回答 1

4

boost::posix_time::microsec_clock::local_time()在夏令时失效时使用测量时间差可能会导致所描述的行为。

如果start设置为 01:59:59.345 并且程序需要 1 秒来完成它的工作(在此期间,夏令时失效),now将设置为 01:00:00.345。

您应该使用boost::posix_time::microsec_clock::universal_time()来避免此问题。

(相关:夏令时和时区最佳实践

于 2013-11-03T15:54:48.983 回答