質問

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

  • 年と地域ごとに一意の1行を含むテーブルを用意し、夏時間の開始時刻と終了時刻、および特定のオフセットを指定します
  • 各地域の式と有効期間を保存するテーブルを用意します(イスラエルなどの地域に必要な有効範囲)

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

zoneinfoまたはそのようなものを使用したいのですが、残念ながらこの場合は選択肢ではありません。同様に、特定のユースケースを満たすために、データベースに日付、タイムゾーン、および夏時間情報を must する必要があります。

似たようなことをした経験がある人はいますか?同様に、私が見逃したかもしれない素晴らしいオプションを誰かが持っていますか?

役に立ちましたか?

解決

あなたは最初の選択肢にほとんど運命づけられています。 「ルール」が設定されている国については、日付を事前に生成できます。時間の変更に関してはありますが、一部の地域にはルールがなく、変更は独裁法案または年次立法投票によって制定されます(ブラジルは今年までそうしました)。

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

他のヒント

DSTルールをデータベースに含める必要がある場合は、外部の信頼できるソース(ライブラリ、Webサイトなど)から自動的に更新することを選択するでしょう。 DSTルールを手動で維持することは、それほど面白くありません。

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

今日(2017年3月)、OlsonデータベースはIANAから入手できます— https://iana.org/time-zones および ftp://ftp.iana.org/tz (特に ftp://ftp.iana.org/tz/releases )。

タイムゾーンに関する情報もある共通ロケールデータリポジトリ CLDR もあります。

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

これは、時間の経過に伴う変化の間に何をすべきかという議論も解決します。 I.E.時計を30分戻すと、実際には同じ日の午前3時25分の2つのインスタンスがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top