私はちょっと混乱して正しいアプローチをしています。utcとしてユーザが選択した日付を保存し、utcフィールドを使用してdbに対してクエリを実行します
私のアプリは、異なるタイムゾーンを持つ場所(イベントの所有者)がそれとやりとりすることを意味するグローバルアプリです。私は物事を単純にしたいと思います。
私のアプリでは、場所(イベントの所有者)が(明らかにdatetimeを選んで)カレンダーにイベントを作成してからdbに保存することができます。 (StartDateTime、EndDateTime)
ユーザー(イベント出席者)は、イベントの近くで発生したイベントを表示します。
私がこれまで行ってきたことは、自分のテーブルにStartDateTimeUTC、EndDateTimeUTCという2つのフィールドを作成し、各ユーザーがデフォルトのtimezoneidを設定できるようにしました。
新しいイベントを作成するとき、私は自分のタイムゾーンを読んで、彼らはUTC
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); //gotten from db
DateTime startDateTimeUserSelected = new DateTime(2016, 4, 14, 2, 15, 0); //user picked from a datetimepicker
DateTime endDateTimeUserSelected = new DateTime(2016, 4, 14, 4, 15, 0); //user picked from a datetimepicker
var starDateTimeUTC = TimeZoneInfo.ConvertTimeToUtc(startDateTimeUserSelected, tz);
var endDateTimeUTC = TimeZoneInfo.ConvertTimeToUtc(endDateTimeUserSelected, tz);
に選択した日時を変換それから私は偉大な、私のデシベルフィールドににそれらを保存するには、今、私は私のユーザーは、UTCとして日付を選択してしまったし、 dbに保存されます。
今、私は今日起こるが、私は(自分のタイムゾーンに基づいて)現在のユーザのローカルタイムを取得するために必要なすべてのイベントのためのDBを照会する
var currentTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tz); //tz being read from db for particular user
そして私はCURRENTTIMEを使用することができます今日起こっているすべてのイベントのために私のdbを見つけて照会してください。
ただ、アプリの 場所は、彼らのユーザーのためのイベントを作成します(場所は世界のどこでも可能)バックエンドを使用して、自分の携帯電話にアプリを使用して、ユーザーが自分の周りの異なる場所で起こっているかのイベントを表示します(同じタイムゾーン)
質問 これは、夏時間を心配することなくタイムゾーンを処理する正しい方法ですか?または、現地時間に基づいてユーザーにイベントを表示し、すべてを同期させておくアプリのために、もっと多くのことをする必要がありますか?
またはすべてをUTCなしで保存し、DBから照会する場所(イベントの所有者)のブラウザからユーザーの現在の日時を判断し、イベントを編集/追加する必要があります。また、モバイルデバイスからユーザー(出席者)の時間を判断します。
私がUTCに行く場合は、プレイスと出席者の両方のタイムゾーンを把握し、すべての比較がUTC経由で行われていることを確認してください。
NONE utcとしてすべてを入力しても、ブラウザ/モバイルデバイスのいずれかからCURRENT DATETIMEユーザーを読み取る必要があるということ以外の変換については心配する必要はありません。
私は何かを見逃しましたか?
端末(サーバ時間)は私にとって重要ではありません。私が心配する唯一の日付は、ユーザが選択したイベントの日付だけです。そのデータを使用して現在の日付に基づいてイベントをユーザに提示します私があなたの答えを誤解しない限り、ローカルに関連するものが私にとって重要であるかどうかを確かめてください。 – Zoinky
@Zoinkyクライアントの国コードを使ってあなたのアプリに表示されるイベントをフィルタリングして、私にとっては理にかなっているのはなぜですか。したがって、同じ国のすべてのクライアントは、サマータイムなどの影響を気にせずに同じイベントを表示します。 –