夏時間規則の変更によりCランタイムライブラリが無効になりましたか?
質問
しばらく前に、時間ベースのライブラリを作成しました。これは、誰かのために1年以内に相対的な時間を計算するために使用できます。当時私は、夏時間のために両方向に1時間シフトしたことを書き留めました。 議会が夏時間規則を変更したことを思いつきました。アルゴリズムの変更を解決するための更新に関する情報を見たことを覚えていません。このトピックに関する情報はありますか?
解決
ほとんどの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」として記録するだけです。文字列、発生を待っているバグです。