2012-10-04 61 views
0

我目前正在研究一個帶有後端sql server數據庫的c#web應用程序。我有一些需要解決的日期問題。如何處理多國/語言應用程序中的時區和日期

該應用程序在GMT時間託管在Web和數據庫服務器上。用戶分佈在3個不同的CEST,MSK,ALMT時區,隨着時間的推移,該網站可能會將網站推廣到其他國家/地區。

在代碼中,我使用SQL中的DateTime.Now和GETDATE(),以及服務器的位置,這是GMT。

我的問題是什麼樣的形式應該存儲在數據庫中,當考慮到不同的文化等考慮時應該是utc日期?應該如何處理以下內容?是否有標準做法?

回答

3

創建時應該以UTC(非服務器的時區; UTC)創建,並且在顯示之前切換到用戶的時區。

要採取UTC時間,請在Web服務器上使用DateTime.UtcNow,在數據庫上使用。

要轉換DateTime值,它說明UTC時間以任何其它時區:

var dt = DateTime.UtcNow; 
var tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
var localTimeInNewYork = TimeZoneInfo.ConvertTimeFromUtc(dt, tz); 

又見Converting Times Between Time Zones MSDN上。

+0

感謝您的信息。如果我認爲我在任何地方都使用utc日期時間,那麼如何根據應用程序文化將其轉換爲當前時區? – amateur

+0

@amateur:您需要以字符串的形式獲取用戶的本地時區(這與文化無關,我可以是中國人,但居住在巴黎),並使用我提供的代碼。另見['TimeZoneInfo.GetSystemTimeZones'](http://msdn.microsoft.com/zh-cn/library/system.timezoneinfo.getsystemtimezones.aspx)。 – Jon

相關問題