2011-05-20 58 views
2

內部部署應用程序我正在轉移到雲端,顯示來自json源的電視調度信息。核心數據使用從開始日期開始的幾秒鐘內的偏移量,因爲這些都是int UTC格式,所以它的開始時間都很好。應用程序依賴於英國在Azure中的夏令時問題

問題出現在移動到雲中。

的內部部署的應用程序是坐落在英國這樣的語言環境是UntedKingdom和電視的時間用正確的輸出

return programmeStart.AddHours(programmeStart.IsDaylightSavingTime() ? 1 : 0); 

然而,現在已經遷移到雲中,IsDaylightSavingTime功能,不再返回由於數據中心是BST不可知的,因此屬實。

一直在絞盡腦汁想辦法對此進行排序。

是否有一種快速簡單的方法來設置託管服務在Azure中運行的區域設置,或者是創建擴展方法以讀取BST運行時的邊界並從中返回的最佳解決方案,然後返回true或假如從那裏例如

public static class DateTimeExtension 
{ 
    public static bool IsMyDaylightSavingTime(this DateTime timeToTest) 
    { 
    if(timeToTest >= GetConfig("bstStart") && timeToTest <= GetConfig("bstFinish")) 
    { 
     return true; 
    } 

    return false; 
    } 
} 

而保持配置值的bst改變他們移動?

感謝

回答

3

你不能改變在Azure服務器時區 - 有很多事情,它假定UTC是當前設置。

你應該能夠得到英國舉行的TimeZoneInfo的字符串,如:

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"); 

後你這樣做,那麼你可以使用框架方法TimeZoneInfo.IsDaylightSavingTimehttp://msdn.microsoft.com/en-us/library/bb460642.aspx

tzi.IsDaylightSavingTime(DateTime.Now); 
+0

Cheers Stuart 已去過 'programmeStart.AddHours(TimeZoneInfo.FindSystemTimeZoneById(「GMT標準時間」)) .IsDaylightSavingTime(programmeStart)?1:0);' – Brett 2011-05-23 09:25:02

+0

當你有偏移量時,爲什麼要編碼1或0? programmeStart.AddHours(TimeZoneInfo.FindSystemTimeZoneById(「GMT標準時間」)。GetUtcOffset(DateTime.UtcNow))更有意義。它不僅清楚你所添加的內容,而且如果偏移量在某個時刻發生變化,這是未來的證明。順便說一句,當我已經指出你的答案並且你去接受別人的同樣答案時,拿走答案的積分並不是很好。 – dunnry 2011-05-23 14:13:19

+0

與薩摩亞程序員不得不考慮的問題相比,我們所有的問題都沒有 - http://www.telegraph.co.uk/news/worldnews/australiaandthepacific/samoa/8503614/Samoa-leaps-dateline-how-time-zones -work.html :)我已經爲其他答案+1了,以試圖解決這個問題。在理想的解決方案中,我想我會混合使用這兩個答案 - 我將使用此答案中的FindSystemTimeZoneById和dunnry答案中的GetOffset。 – Stuart 2011-05-23 20:24:07

1

爲什麼你不能簡單地返回UTC,讓客戶把所按他們的語言環境?

編輯:這裏是代碼

var offset = TimeZoneInfo.GetSystemTimeZones() 
.Where(z => z.Id == "GMT Standard Time") 
.Single() 
.GetUtcOffset(DateTime.UtcNow) 
+0

的電視節目單需要顯示節目開始的英國時間,所以客戶時間翻譯不是真正的選擇。 – Brett 2011-05-20 14:14:02

+0

好的,所以我想你可以使用TimeZoneInfo類,並要求你正在尋找的具體時區,然後才能做到這一點。請參閱此方法:http://msdn.microsoft.com/en-us/library/system.timezoneinfo.getsystemtimezones.aspx – dunnry 2011-05-20 14:25:25