2017-09-23 5 views
0

レコードは実際にレコードがシステムに入力された時点のUTCに格納されています。夏時間を使用して以前のローカルレコード時間を正確に処理します

私の仕事は、ユーザーが過去のイベントの記録を入力できるようにすることと、イベントが発生したときにそれらのイベントがローカルに発生したときです。

私のジレンマは、異なるタイムゾーンだけでなく、年間の特定の期間に夏時間の観測もあるということです。

正確にチャットされた形式で個人イベントを報告することが重要なので、私の質問は、正確な日付をユーザーに正確に報告する方法です。人々は異なる時間帯に移動するため、同じ人物が異なる世界の場所で同じ日時を覚えている可能性があります。

これらのイベントを保存してユーザーに表示するにはどうすればよいでしょうか? フォームデータは、asp.net c#webアプリケーションを介して入力され、SQL Serverデータベースに格納されます。入力された日時は、常にユーザーのローカル日時になります。

+0

UTCに保管してください。ユーザーがその日付をどのように追加するか、表示する必要がある場所(Webアプリ、デスクトップアプリなど)は指定していません。 –

+0

こんにちは、申し訳ありませんが...これらはC#asp.netを使用してWebアプリケーションで表示されています。 – cloudseeker

+0

私のアドバイスは、データの保存と交換に常にUTCの日付を使用することです。それらを表示する(または新しい日付を取得する)必要があるときは、日付の表示と作成に現在のユーザーのタイムゾーン情報を使用するクライアント側のテクノロジ(javascript)に完全に依存することをお勧めします。 –

答えて

1

過去に発生した単一発生イベントの場合、最も簡単な解決策は、SQL Serverのdatetimeoffsetフィールドを使用して格納し、対応するDateTimeOffsetタイプを.NETで使用することです。 datetimeoffset値の日付と時刻の部分は、イベントの現地時間を反映しており、そのオフセットはその現地時間がその瞬間のUTCよりどのくらい前か後ろであるかを反映しています。詳細は、DateTime vs DateTimeOffsetを参照してください。

このアプローチでは、DSTに対する追加の補償は必要ありません。単なる発生であるため、オフセットには、その時点で有効な夏時間と標準時間の両方が含まれます。

難しい部分は、MVC Webサイトのユーザーから正確なDateTimeOffset入力値を収集します。現時点では、DateTimeOffsetの簡単な組み込みコントロールはありません。代わりにDateTimeの入力ボックスを表示し、可能なオフセットのドロップダウンリストを別々に表示する必要があります。私はそのリストを生成する方法を示すデモコードhereをいくつか持っています。これを使用してドロップダウンを設定し、ユーザーにオフセットを選択させることができます。うまくいけば、これは最終的にASP.NETコアに統合されるため、いつでもDateTimeOffsetに直接バインドすることができます。これに関するいくつかの議論はaspnet/Mvc#6648です。

関連する問題