2012-02-20 35 views
3

更新偏移 - 這個問題並沒有擴展方法不正確的時區在Azure中

內說謊,因爲事實證明,有一個與我的擴展方法沒有實際問題。當我直接從網絡服務器提供DateTime時,就像DateTime.UtcNow.ToUserLocalTime()一樣,我意識到該方法實際上產生了正確的結果。問題在於我不小心在顯示不正確的日期時間內調用了兩次 - 首先在控制器中,然後在視圖中再次調用它。一個非常愚蠢的錯誤,在我的頭靠牆撞了幾個小時後才意識到。從現在開始,它僅由控制器調用。

我在運行在Azure中的ASP.Net MVC3應用程序中的時區轉換有問題。當我在本地運行應用程序時,一切正常,但是當我在Azure中運行完全相同的代碼時,它將在1小時內關閉。

我已經創建了DateTime的擴展方法,用於根據用戶選擇的時區轉換DateTime。所有日期時間都以UTC格式存儲。

public static DateTime ToUserLocalTime(this DateTime date) 
{ 
    date = DateTime.SpecifyKind(date, DateTimeKind.Utc); 
    if (!string.IsNullOrEmpty(SecurityContext.CurrentUser.TimeZone)) 
    { 
     var timezone = SecurityContext.CurrentUser.TimeZone; 
     var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timezone); 
     return TimeZoneInfo.ConvertTime(date, timeZoneInfo); 
    } 

    return date; 
} 

SecurityContext.CurrentUser.TimeZone是時區的字符串表示,在我的情況W. Europe Standard Time

當我從本地的SQL數據庫中獲取的日期時間2011-12-02 13:46:22,並通過我的ToUserLocalTime方法運行它,它轉換爲W. Europe Standard Time在我的本地環境中,我得到2011-12-02 14:46:22這是正確的。但是,當我在Azure中運行完全相同的代碼時,從我的SQL-Azure數據庫中讀取,其中包含完全相同的DateTime和所選時區,我獲得2011-12-02 15:46:22。這讓我感到困惑,爲什麼最終會關閉一個小時?

我真的不知道如何調試,因爲我無法在本地重現它。有沒有辦法在Azure角色中進行調試,以便我能夠看到代碼中究竟發生了什麼?像Visual Studio中的調試器一樣?

我嘗試在發佈應用程序時啓用IntelliTrace,但是當我這樣做時,應用程序無法啓動,並在連接到Azure-SQL db時抱怨連接錯誤。我沒有IntelliTrace的經驗,生成的日誌能告訴我關於這裏發生了什麼的任何事情嗎?在這種情況下花費時間讓InteliTrace工作是否值得?

任何想法可能是錯誤的,或者如何調試它將不勝感激。

+0

你看到在你的SQL Azure數據庫上運行的Emulator中的同樣的問題?如果你這樣做,你可以使用Visual Studio並且以這種方式進行故障排除 – Tom 2012-02-20 16:20:20

+0

@Tom我會嘗試一下,謝謝你 – 2012-02-20 17:09:01

回答

4

有關使用

return TimeZoneInfo.ConvertTimeFromUTCTime(date, timeZoneInfo); 

,而不是

return TimeZoneInfo.ConvertTime(date, timeZoneInfo); 

什麼參考:http://social.msdn.microsoft.com/Forums/en-AU/windowsazuredevelopment/thread/04be9d07-fcdb-4bf2-b380-57c062382409

然後,您可以刪除行date = DateTime.SpecifyKind(date, DateTimeKind.Utc);,假設你的約會總是有不明那種

或者它可以是夏令時搞砸了嗎?見http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/92696af4-5169-4015-90eb-79da3c5136c2/

要測試此,嘗試去改變你的時區的頁面,通過點擊你的計算機時鐘和「更改日期和時間設置。然後取消/檢查夏令自動調整時間。

+0

謝謝你的回答!使用'ConvertTimeFromUtc'代替,但不幸的是,這並沒有幫助,我認爲這不是一個夏令時問題,但我不確定是否。 – 2012-02-20 16:50:11

+0

編輯夏令時測試程序。1小時關閉聽起來很像夏令時剛開g搞砸了。 – 2012-02-21 04:17:12

+0

感謝您的更新,不幸的是,本地沒有任何區別。無論是否選中自動調整夏令時設置,我都會得到相同的正確結果。 – 2012-02-21 14:47:00