私は午前3時から午前5時まで毎晩実行されるWindowsサービスを提供しています。ジョブが実行されると次の処理が行われます。DateTimeを使用した前日のカウントでは、UTC形式の問題が発生します。
var endDate = DateTime.Today.ToUniversalTime(); // Set to midnight
var startDate = endDate.AddDays(-1);
夜間に実行されるクエリのようなものを(すべての日付は、現在、UTCとして格納されている)と言う:これは正常に動作します
SELECT * FROM Table WHERE CreatedAt BETWEEN startDate AND endDate
、それは基本的にすべてのグラブジョブが実行される前日のデータ。私は今、ユーザーがボタンをクリックして夜間に処理されるデータ数を見るためのUI部分を開発中です。
私が遭遇している問題は、通常の営業時間内にユーザーが仕事をしているときにそのボタンをクリックするとカウントが1日遅れることです。このカウントは、UTC時刻の真夜中以降になるため、現地時間が東部沖の午後8時(西海岸に位置している)の後である場合にのみ正しく表示されます。
私のようなものでこれを解決しようとした:
var now = DateTime.Now;
var midnight = DateTime.Today.ToUniversalTime();
var endDate = (now.Day == midnight.Day) ? midnight.AddDays(1) : midnight;
var startDate = endDate.AddDays(-1);
しかし、それだけで一日のいくつかの部分の間に動作しますので、これは正しくありません。現地時間の午前0時にボタンをクリックすると、もう一度オフになります。
この問題を解決するためにDateTimeオブジェクトを使用する巧妙な方法はありますか?