ASP.NET MVC 5を使用してアプリケーションを作成しています。データベースに保存するすべてのdatetimeは、ローカルタイムゾーンからUTCタイムゾーンに変換する必要があります。Entity Frameworkは保存時にdatetimeフィールドを自動的にUTCに変換できますか?
リクエストサイクル中に最適な場所がどこにあるか不明です。
ViewModelルールを渡した後、各フィールドをコントローラでUTCに変換できます。しかし、私はこれがあまりにも多くのコード/ステップであると感じています。
エンティティフレームワークに、変更を保存する前に自動的にdatetimeをUTCに変換するルールを追加する方法はありますか?
この私はUTC
public static DateTime? ConvertToUTC(DateTime? val, TimeZoneInfo destinationTimeZone = null)
{
if (val != null)
{
var dateTimeToConvert = ConvertToDateTime(val);
if (destinationTimeZone == null)
{
if (ConfigurationManager.AppSettings["LocalTimeZone"] != null)
{
destinationTimeZone = TimeZoneInfo.FindSystemTimeZoneById(ConfigurationManager.AppSettings["LocalTimeZone"]);
}
else
{
destinationTimeZone = TimeZoneInfo.FindSystemTimeZoneById(TimeZone.CurrentTimeZone.StandardName);
}
}
return TimeZoneInfo.ConvertTimeFromUtc(dateTimeToConvert, destinationTimeZone);
}
return null;
}
最高の場所は、クライアントから行うことです。クライアントだけが自分がどのタイムゾーンを使用しているかを知っていて、クライアントが日付時刻をUTCまたはDateTimeOffsetタイプとして送信するのはクライアントの責任である必要があります。サーバー上で実行しないでください。その時点で、すべてのクライアントがサーバーと同じタイムゾーンで実行されていることを確認できない限り、遅すぎます(*イントラネットWebアプリケーションで動作する可能性があります)。同じことがdatetimeを送信し、UTCとしてクライアントに送信し、クライアントをロケールに変換させます。これをうまく処理するクライアントサイドライブラリがあります。 – Igor
私はユーザーのローカルタイムゾーンをユーザープロファイルで知っています。すべてはそれから派生しています。 – Jaylen
ユーザーは旅行しますか?ユーザーBobがニューヨークからL.Aに移動するとどうなりますか?そして、BobはプロパティとしてDateTimeを持つDBに何かをコミットするか、DateTimeプロパティを持つものを取得しますか? Bobは以前にタイムゾーン情報を更新しておく必要があります。多分、Bobが新しいタイムゾーンに移動する場合はうまくいくかもしれませんが、ボブが異なるタイムゾーンを頻繁に使う旅行者である場合、これは管理が難しくなります。 – Igor