如何在多国/语言应用程序中处理时区和日期

时间:2012-10-04 20:54:17

标签: c# sql datetime utc cultureinfo

我目前正在开发一个带有后端sql server数据库的c#web应用程序。我有一些问题需要解决。

应用程序在GMT时间内托管在Web和数据库服务器上。用户分布在3个不同的时区CEST,MSK,ALMT,可能会随着时间的推移将网站推广到其他国家。

目前我在代码中使用SQL中的DateTime.Now和GETDATE(),以及服务器的位置,这是GMT。

我的问题是,在考虑不同的文化等时,应该将数据存储在数据库中的形式是什么形式等。它应该是utc日期吗?应该如何处理以下内容?有标准做法吗?

1 个答案:

答案 0 :(得分:3)

创建时,所有内容都应该是UTC(不是服务器的时区; UTC),并在显示之前转移到用户的时区。

要采用UTC时间,请在Web服务器上使用DateTime.UtcNow,在数据库上使用GETUTCDATE()

将指定UTC时间的DateTime值转换为任何其他时区:

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

另请参阅MSDN上的Converting Times Between Time Zones