スケジューラ アプリケーションがあります。このアプリケーションを使用すると、ユーザーは次の 30 日間、毎日午前 8 時 PT に実行するようにタスクをスケジュールできます。さまざまなタイムゾーンのユーザーがいるため、時刻を UTC に変換してデータベースに保存します。次の関数を使用して、時刻を UTC に変換します。
public static DateTime ToAccountLocalTime(this DateTime dt)
{
return TimeZoneInfo.ConvertTimeFromUtc(dt, TimeZoneInfo.FindSystemTimeZoneById("user time zone"));
}
ユーザーが 2012 年 11 月 1 日の次の 30 日間、毎日午前 8 時 (PT) にタスクを実行するようにスケジュールした場合、データベースでは 30 日ごとに 30 のエントリが作成され、時間は UTC の午後 4 時に設定されます (上記で返されるように)。方法)。
問題が発生したのは、夏時間が終了した 11 月 4 日です。スケジューラ サービスは常に UTC に基づいて実行されるため、タスクは午前 8 時ではなく午前 7 時に実行を開始しました。
これを解決するには、上記のメソッドで 11 月 1 日から 11 月 3 日までの日付の場合は午後 4 時 (UTC)、11 月 4 日以降の日付の場合は午後 3 時 (UTC) を返す必要があります。これを実現するには、どのような変更を行う必要がありますか?