我有一個windows服務,每天凌晨3點到凌晨5點運行。當作業運行時會發生以下情況:上一天使用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
這一切正常,它基本上抓住一切作業運行前一天的數據。我現在正在開發一個用戶界面部分,用戶點擊一個按鈕查看將在夜間處理的數據計數。
我遇到的問題是當用戶在正常工作時間內工作並點擊該按鈕時,計數將被關閉1天。如果當地時間晚於美國東部時間晚上8點(服務器位於東海岸),則計數將只能正確顯示,因爲UTC時間是午夜之後。
我試過的東西,如來解決這個問題:
var now = DateTime.Now;
var midnight = DateTime.Today.ToUniversalTime();
var endDate = (now.Day == midnight.Day) ? midnight.AddDays(1) : midnight;
var startDate = endDate.AddDays(-1);
但是,這是不正確的,它會在一天中的某些部分才能正常工作。如果在當地時間午夜之後點擊該按鈕,則該按鈕將再次關閉一天。
有沒有什麼聰明的方法來使用DateTime對象來解決這個問題?