日付/時刻をUTCとしてデータベースに保存し、特定のタイムゾーンに基づいてアプリケーション内で現地時間に計算します。たとえば、次の日付/時刻があるとします。
01/04/2010 00:00
DST(夏時間)を遵守している英国などの国で、この特定の時間に夏時間になっているとしましょう。この日付をUTCに変換してデータベースに保存すると、実際には次のように保存されます。
31/03/2010 23:00
日付はDSTの場合は-1時間調整されます。これは、送信時にDSTを監視している場合に正常に機能します。しかし、時計を戻すとどうなりますか?その日付をデータベースから取得して現地時間に変換すると、その特定の日時は31/03/2010 23:00
実際にはとして処理されたときと見なされ01/04/2010 00:00
ます。
私が間違っている場合は訂正してください。ただし、UTCとして時刻を保存する場合、これはちょっとした欠陥ではありませんか?
タイムゾーン変換の例
基本的に私が行っているのは、ユーザーが範囲レポートを実行できるようにするために、情報がシステムに送信される日時を保存することです。日付/時刻の保存方法は次のとおりです。
public DateTime LocalDateTime(string timeZoneId)
{
var tzi = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
return TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tzi).ToUniversalTime().ToLocalTime();
}
UTCとして保存:
var localDateTime = LocalDateTime("AUS Eastern Standard Time");
WriteToDB(localDateTime.ToUniversalTime());