6

世界のさまざまな地域のサマータイム (夏時間) 切り替えルールをデータベースに保存する必要があります。私はすでにリージョンとサブリージョンを格納する方法を持っています (したがって、「オーストラリアの半分」/アリゾナ/ナバホの問題全体が処理されます) が、これを達成するための最も効率的なスキーマは何であるか疑問に思っています。私が見た2つのオプション:

  • 夏時間の開始時間と終了時間、および特定のオフセットを示す、年と地域ごとに一意の 1 行を含むテーブルを用意します。
  • 各地域の数式と有効な日付範囲を格納するテーブルを用意します (イスラエルのような地域には有効な範囲が必要です)。

最初の利点は、文字通り何でも可能であるため、柔軟性です。残念ながら、(a) より多くのスペースが必要になり、それに応じて (b) データ入力を取得するために多くの作業が必要になります。2 つ目は、1 つの行が 1 つの地域に何十年も対応できるため、優れていますが、アプリケーション層で何らかの言語パーサーとインタープリターも必要になります。このデータベースは、強力なテキスト処理機能を持たない言語で書かれたいくつかの異なるアプリケーションで使用されるため、その方法は避けたいと思います。

zoneinfo などを使用したいのですが、残念ながらこの場合はオプションではありません。同様に、日付を正規化することはできません。タイムゾーンとサマータイムの情報は、特定のユースケースを満たすためにデータベースに存在する必要があります。

誰かが似たようなことをした経験がありますか? 同様に、私が見逃した可能性のある優れたオプションを誰かが持っていますか?

4

4 に答える 4

16

あなたは最初のオプションに運命づけられています。時間の変更に関する「ルール」がある国では、希望するだけ先の日付を事前に生成できますが、一部の地域にはルールがなく、変更は独裁的な法定書または議会の投票によって毎年制定されます (ブラジルでは、ことし)。

これが、すべての OS ベンダーがタイムゾーン ファイルの変更を年に 1 ~ 2 回ロールアウトする理由です。100% 正確なファイルをプログラムで生成することはできないため、そうする必要があります。

于 2008-09-30T18:42:28.923 に答える
4

DST ルールをデータベースに格納する必要がある場合は、おそらく外部の信頼できるソース (ライブラリ、Web サイトなど) から自動的に更新することを選択します。DST 規則を手動で維持するのは、あまり楽しいことではないように思えます。

于 2008-09-30T18:45:24.797 に答える
2

タイム ゾーン規則に関する最良の情報源の 1 つは、elsie.nci.nih.govから入手できる Olson データベースです。2008 年 9 月、データの現在のバージョンは tzdata2008f.tar.gz で、コードの現在のバージョンは tzcode2008e.tar.gz でした (そうです、データがリリースされたときに常にコードがリリースされたわけではありません)。これは、他の多くのシステム (特に Oracle 情報を含む) の情報源になる傾向があります。メーリングリストもあります。ご覧のとおり、2008 年にはこれまでに 6 つのバージョンのデータがありました。私のマシンには 2005r、2006l、2007k のコピーが潜んでいるので、かなり頻繁に変更される可能性があります。

現在 (2017 年 3 月)、オルソン データベースは IANA から入手できます — https://iana.org/time-zonesおよびftp://ftp.iana.org/tz (特にftp://ftp.iana.org/ tz/リリース)。

また、タイム ゾーンに関する情報を含むCommon Locale Data Repository CLDRもあります。

于 2008-10-03T02:37:47.390 に答える
1

Oracle DBMS はこれを自動的に処理します。日付は内部表現で格納され (引数のために UMT を想像してみましょう)、文字列に変換されるとタイムゾーンの規則に従ってフォーマットされます。

これにより、時間の経過とともに変化する間に何をすべきかについての議論も解決されます。つまり、時計を 1/2 時間巻き戻すと、実際には同じ日の午前 3 時 25 分が 2 回発生します。

于 2008-10-02T10:02:17.097 に答える