我目前正在开发一个带有后端sql server数据库的c#web应用程序。我有一些问题需要解决。
应用程序在GMT时间内托管在Web和数据库服务器上。用户分布在3个不同的时区CEST,MSK,ALMT,可能会随着时间的推移将网站推广到其他国家。
目前我在代码中使用SQL中的DateTime.Now和GETDATE(),以及服务器的位置,这是GMT。
我的问题是,在考虑不同的文化等时,应该将数据存储在数据库中的形式是什么形式等。它应该是utc日期吗?应该如何处理以下内容?有标准做法吗?
答案 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。