是否有可能錯誤的結果實際上是在您的機器上而不是Azure,並且是因爲您將ScheduledDateUtc
初始化爲本地時間而不是UTC?
考慮的這兩行代碼:
new DateTime(2015, 6, 1, 1, 1, 1).AddHours(5).ToUniversalTime().Dump();
new DateTime(2015, 6, 1, 1, 1, 1, DateTimeKind.Utc).AddHours(5).ToUniversalTime().Dump();
在這裏,我們是在夏天的時候是UTC + 1。上面的輸出是:
2015年1月6日5時01分01秒
2015年1月6日6時01分01秒
他們1小時出來的我忘記了在第一行代碼中的構造函數中指定輸入是UTC。
如果因爲ScheduledDateUtc
由ORM初始化沒有進入到構造函數,你可以使用SpecifyKind
:
ScheduledDateUtc = DateTime.SpecifyKind(ScheduledDateUtc, DateTimeKind.Utc)
其不幸,你存儲的偏移不是一個時區,你可以有夏令時問題。如果你是存儲在Windows時區的名稱,你可以使用TimeZoneInfo.ConvertTimeFromUtc
(不需要在這裏指定Kind
,因爲這假定UTC)按照本例來自MSDN:
TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
ScheduledDateLocal = TimeZoneInfo.ConvertTimeFromUtc(ScheduledDateUtc, cstZone);
您可以使用偏移而不是實例化一個"custom" timezone並仍然使用上述功能。
我遇到了similar issue,我不得不根據用戶的當地時間安排事件。我結束了存儲星期幾,小時,分鐘和Olson timezone字符串,並使用Noda-Time轉換爲DateTimeOffset並從那裏到服務器時間。
你知道Azure服務器在什麼時區嗎? – user990423
Im在UTC + 1和計算是一個小時太多,所以我猜UTC0 – Corstiaan
我的猜測是你將ScheduledDateUtc初始化爲Utc日期但是,我認爲它不正確你的機器不在Azure上我假設在Utc上。我認爲我們需要在您的機器上看到示例輸入,輸出和Azure上的輸出。 –