1

私は現地時間に非常に敏感なソフトウェアを書いています。私は boost::posix_time を使用してコンピューターの現地時間を取得しています。しかし、実行中に時刻とタイムゾーンを変更すると、現地時間が完全にずれることに気付きました。ここに私が書いた小さなテストプログラムがあります:

#include <boost/date_time/posix_time/posix_time.hpp>
#include <stdio.h>

int main(int argc, char* argv[])
{
  while(1)
  {
    std::cout << "It's : " << boost::posix_time::to_simple_string(
      boost::posix_time::second_clock::local_time()) << std::endl;
    sleep(1);
  }

  return 0;
}

次に、アプリケーションを起動します。時刻は正しいです。

./testDate 
It's : 2013-Apr-22 10:35:22

次に、実行中に時刻とタイムゾーンを変更しましたが、時刻が完全に間違っていました!

 rm /etc/localtime  ; ln -s /usr/share/zoneinfo/Europe/Belfast  /etc/localtime ; date -s 10:35:00

It's : 2013-Apr-22 10:35:16
It's : 2013-Apr-22 10:35:17  <-- Time changed here
It's : 2013-Apr-22 04:35:00
It's : 2013-Apr-22 04:35:01

しかし、アプリケーションを手動で再起動すると、時刻は再び正確になります! システムクロックから日付時刻を更新するようにブーストに指示する方法があるかどうか疑問に思っていましたか? 起動時に一度読み取り、時間をメモリに保存していると思います。そして、タイムゾーンまたは時間が変更されたことをどのように検出できますか?ブーストに時間を更新するように指示する必要がありますか? 定期的に時刻を聞いて、最後に時刻を取得した時刻と大幅にずれているかどうかを確認しますか?

4

1 に答える 1

0

このようなアプリケーション固有の追加には不必要なパフォーマンス ヒットが必要になるため (または、さらに悪いことに、めったに必要とされない機能で API が乱雑になる可能性があるため)、この機能は意図的にブーストから除外されたと思われます。時間変更の検出はユーザー アプリケーションで行う必要があるという他の意見に同意します。

于 2013-09-07T22:47:15.637 に答える