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