少し前に、誰かのために1年以内の相対的な時間を計算するために使用できる時間ベースのライブラリをまとめました。当時、夏時間調整のために両方向に1時間シフトしたことを指摘しました。議会が夏時間の規則を変更したことに気づきました。アルゴリズムの変更を解決するための更新に関する情報を見たのを覚えていません。誰かがこのトピックに関する情報を持っていますか?
5 に答える
ほとんどの Unix ライクなシステムは、タイムゾーン情報に Olson tz データベースを使用します。
http://www.twinsun.com/tz/tz-link.htm
米国のタイムゾーン規則への変更は、tz データベースのバージョン 2005l で実装されました。
Visual Studio 2005以前では、MicrosoftはCランタイムライブラリの更新バージョンをリリースしました。詳細については、こちらをご覧ください。
どのプラットフォームに取り組んでいますか?
議会は全世界のルールを設定していないので:)長い間Unix/Linuxのルールを柔軟に指定するメカニズムがありました
ファイルの形式については、たとえば、http://www.manpagez.com/man/8/zic/を参照してください。特定のシステムでは、新しいルールの定義を更新する必要がある場合があります(ディストリビューションでまだ処理されていない場合)。
Windowsの場合、MSはいくつかのルールを組み込み、状況が変化したときに更新をリリースします。
MacOの場合、私にはわかりませんが、Unixのやり方を継承していると思います。
ただし、これらすべての場合において、Cライブラリを変更する必要はありません。
より一般的な注意点として、Cランタイムは、内部データファイルを使用して、内部時間表現からユーザーのロケールにマップします。これらのマッピングは、現在の法律に一致するように、それぞれのベンダーによって定期的に更新されます。
内部時計はUTCに設定する必要があるため、夏時間はタイムゾーンを変更するだけです。たとえば、私のロケールでは、10月26日にMacがCEST(中央ヨーロッパ夏時間)から「通常の」CET(中央ヨーロッパ時間)に切り替わりました。時計の表示は変わりましたが、コンピューターの時刻は変わりませんでした。
http://www.timeanddate.com/library/abbreviations/timezones/eu/cest.html
実際、これは、日時変数をUTCまたはタイムゾーンを考慮したネイティブ形式で保持する必要があることを意味します。そのため、日時を「YYYYMMDDHHMMSS」文字列として記録するだけで、発生するのを待っているバグになります。