2010-03-12 102 views
2

我正在使用.Net 3.5在C#中的應用程序。我有用戶的時區值存儲在這種格式的數據庫(-05:00,1),其中-5.00代表EST時區值和指示此時區遵循夏令時(如果0不是夏令時區)。使用C#將時間轉換爲指定時區?

現在我想任何日期時間值轉換成考慮了夏令時值該時區值。

任何幫助表示讚賞。由於

回答

5

剛走的偏移,以及是否是夏令時是不是真的足以說明一個時區:可以有相同的標準偏差和DST偏移幾個時區,但有DST轉換在不同倍。

這是數據已經在數據庫中,或者你還在設計它?理想情況下,您應該存儲一個時區ID - 與TimeZoneInfo一起使用的是Windows ID,這不是理想的IMO(我更喜歡其他行業傾向於使用的IANA/Olson ID),但至少它代表實時區域。

一旦你得到了TimeZoneInfo並且你想要轉換的瞬間,ConvertTimeFromUtcConvertTimeToUtc可能就是你要做的 - 但要小心你的意思是「任何日期時間值」。你需要確保你始終知道你所代表的是什麼。

BCL在所有這一切上都有些毛病,這是我開始Noda Time的原因之一,它允許使用IANA時區數據以及BCL。

0

你爲什麼不拿到GMT0並添加用戶的延遲(+/-)?

3

@skeet是對有關時區。相信我他們瘋了。你有像印度那樣的地方.5小時。像委內瑞拉這樣剛剛起步並改變其時區的地方。像美國這樣的地方會改變DST開始和結束的日期。你必須記住,時區受制於該國的政治意願,而且它們確實發生了變化(比你想象的要多)。使用時區編號,而不是試圖跟蹤數據庫中的偏移量。

如果你還沒有弄明白,使用DateTimeOffset會讓你的生活變得更容易100倍,如果你必須處理時區。

相關問題