更新偏移 - 這個問題並沒有擴展方法不正確的時區在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工作是否值得?
任何想法可能是錯誤的,或者如何調試它將不勝感激。
你看到在你的SQL Azure數據庫上運行的Emulator中的同樣的問題?如果你這樣做,你可以使用Visual Studio並且以這種方式進行故障排除 – Tom 2012-02-20 16:20:20
@Tom我會嘗試一下,謝謝你 – 2012-02-20 17:09:01