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()して、夏時間が無効になっているときに時差を測定すると、前述の動作が発生する可能性があります。

が 01:59:59.345 に設定され、プログラムが処理に 1 秒かかる場合start(その間、夏時間は無効になります)、now01:00:00.345 に設定されます。

boost::posix_time::microsec_clock::universal_time()この問題を回避するには、を使用する必要があります。

(関連:夏時間とタイム ゾーンのベスト プラクティス)

于 2013-11-03T15:54:48.983 に答える