ASP.Net 3.5 / SQL Server 2005を使用してWebサイトでTimeZonesを使用する
-
22-07-2019 - |
質問
Webアプリで現地時間を実装する方法を決定しようとしています。すべてのユーザーがログインしており、匿名ユーザーはいません。現地時間ですべての時間値を確認する必要があります。
これはどのように行われるべきですか?
- すべてのDateTime値はデータベースにUTC時間として保存されます
- 各ユーザーのプロファイルにはUTCオフセット値が保存されています
- 日時値を表示するとき、データベースから値を取得し、ユーザーオフセットを適用します。
これは進むべき道ですか?それとも何か不足していますか?
解決
ユーザーのUTCオフセットを保存しないでください-完全なタイムゾーン情報を知るには十分ではありません。 OlsonタイムゾーンID を保存する必要があります。 "ヨーロッパ/ロンドン"。その後、過去の変更、夏時間などを考慮して、現地時間のUTC時間を表示できます。
編集: TimeZoneInfo
IDは実際には通常のOlson形式ではないように見えますが、ユーザーに(選択として)表示できる適切なものがある限り、ID後でゾーンを取得できますが、おそらく大丈夫です...後で他のシステムと相互運用する必要がある場合は、問題が発生する可能性があります。
タイムゾーンについてユーザーに質問する必要があります(JavaScriptを使用して最初に推測しようとする場合があります)。
詳細については、 TimeZoneInfo クラスを調査する必要があります。これ-私は自分でそれをあまり使用したとは言えませんが、.NET 3.5の時点でそれが行く方法です。特に、 FindSystemTimeZoneById および GetSystemTimeZones が重要になります。
タイムゾーンは一般に苦痛ですが、少なくとも TimeZoneInfo
は古い TimeZone
タイプよりも多くのサポートを提供します。
他のヒント
それは私にとって最も簡単な方法のように聞こえます。発生する可能性のあるスリップアップは、一部のエリア(インディアナ州の一部やアリゾナ州全体など)が夏時間に対応していないため、正確な時刻を表示するために特別な予防措置を講じる必要があることです。