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