2010-11-17 86 views
2

我有一個處理不同時區的貸款的服務器應用程序。 服務器使用UTC工作,計劃任務將在服務器@ 08:00當地時間啓動一個進程,並選擇該時區的貸款進行處理。服務器必須檢查每個貸款,然後對於某些貸款設置超時,將在特定的本地時間觸發(調整爲夏令時),對於爭論說第二天17:30,它需要計算UTC等效時間,然後鍛鍊小時數,分鐘數&需要經過的時間纔會到達timout。C#時區計算問題

我認爲的問題是將超時的業務需求轉換爲可配置的設置。這一要求可能會在同一天或下一週的17:30改爲17:30。我需要一個解決方案(如果有的話)在超時期間應對夏時制變化發生。

回答

1

因此,您只需將特定時區的本地時間轉換爲UTC時間(適用於超時等)?

使用TimeZoneInfo.ConvertTimeToUtc,作爲DateTime和相關的TimeZoneInfo在本地日期/時間通過。

值得注意的是,某些當地時間可能不存在,或者可能會出現兩次,包括DST更改。對於大多數時區而言,這種情況發生在當地時間早上,所以它可能不會影響您的業務規則 - 但值得注意。如果需要,您可以使用TimeZoneInfo.IsAmbiguousTimeTimeZoneInfo.IsInvalidTime來檢測這種情況 - 當然,您需要在檢測到該問題後才能確定該做什麼。

1

如果你知道當地時間,它的時區和所需日期,你可以使用TimeZoneInfo.ConvertTimeToUtc作爲世界時間。

TimeZoneInfo是DST知道,所以你應該能夠diff的兩個通用(UTC)時間,你得到這樣(從當前服務器的本地時間,並從目標中的利率貸款時區計時期滿),以確定必要的定時器間隔。

+0

謝謝,但有取當前本地時間和工作了多少小時,分鐘,秒將當前的時間和所需的超時相隔一個優雅的方式? 我能想到做到這一點的唯一方法是某種hacky字符串操作,例如: – 2010-11-18 08:47:52

+0

當前時間:2010年11月1日08點01分22秒 要求:在同一天將超時設置爲17:00。 Hacky String Replace 08 => 17&01 => 00 將當前日期和超時時間區分開以找到小時,分鐘和秒 – 2010-11-18 08:50:28

0

我建議不要轉換爲UTC。當DST開始/結束時不斷變化,有時幾乎沒有任何通知(特工會曾將定時日更改爲12天后)。這聽起來像是你希望這個過程在當地時間17點30分運行。

要做到這一點的唯一方法是存儲本地時間和時區。並注意「當地時間」不是那個時區的時間,它只是一天的設定時間。然後,當您需要計算下次運行時間時,將時區應用於您運行日期的taime並獲取下一個事件的UTC時間。

所以具體事件 - 以UTC存儲。重新舉辦活動 - 在當地時間&時區。

更多的http://blogs.windwardreports.com/davidt/2009/11/what-every-developer-should-know-about-time.html