2012-10-04 40 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

相关问题