データベース内の各住所のタイムゾーンの収集を開始したいと考えています。タイムゾーンを保存するためのベストプラクティスは何ですか?既存の住所レコードのタイムゾーンを取得するにはどうしますか?
Microsoft SQLサーバー、.net mvc、C#を使用しています。任意の提案をいただければ幸いです。
データベース内の各住所のタイムゾーンの収集を開始したいと考えています。タイムゾーンを保存するためのベストプラクティスは何ですか?既存の住所レコードのタイムゾーンを取得するにはどうしますか?
Microsoft SQLサーバー、.net mvc、C#を使用しています。任意の提案をいただければ幸いです。
回答:
常に(または年に2回)変化しないものを保存したい。タイムゾーンデータベースhttps://en.wikipedia.org/wiki/List_of_tz_database_time_zonesは、まさに正しいものです。つまり、2つの文字を格納するだけです。
このデータベースから、時間オフセットを照会でき、夏時間がアクティブであるときも確認できます。これは時間オフセットだけでなく、エリアも提供するため、同じ緯度にある多くの場所は異なるコードを持ち、タイムゾーンルールを個別に変更でき、ソフトウェアがそれを処理できます。
データベースに変更を加える必要があるのは、場所がそれが属するタイムゾーンを変更するときだけです。これは非常にまれです。
.Netフレームワーク4.0以降を使用していると仮定すると、TimeZoneInfoが必要です。
すべての日付値をUTC形式でデータベースに保存します。各クライアントのID値またはToSerializedString()の結果のいずれかを使用して、TimeZoneInfoオブジェクトを作成し、保存されている日付をローカル形式に変換して表示します。
各アドレスのタイムゾーンをDBに保存したいとおっしゃいましたが、それで何をしたいのかお話ししていません。DBに何かを保存すること自体が目的であることはめったにありません。
いずれにせよ、私はTZデータベース(別名Olsenデータベース)を直接使用するか、TZを統合する市販のソフトウェアを使用することを検討します。タイムゾーンを単に文字列として保存して、TZ DBエントリの 1つを参照することができます(例: 'Africa / Kampala'または 'Europe / Paris')。