我目前正在使用带有后端sql服务器数据库的ac#Web应用程序。我有一些需要解决的约会问题。
该应用程序在格林尼治标准时间(GMT)托管在Web和数据库服务器上。用户分布在CEST,MSK,ALMT的3个不同时区,有可能随着时间的推移将网站推广到其他国家/地区。
目前在代码中,我在SQL中使用DateTime.Now和GETDATE(),并随服务器位置一起使用,即GMT。
我的问题是,当考虑到不同的文化等时,日期戳应以什么形式存储在数据库中。应该是utc日期吗?以下应如何处理?有标准做法吗?
创建后,所有内容都应使用UTC(而不是服务器的时区; UTC),并在显示之前转移到用户的时区。
要使用UTC时间,请DateTime.UtcNow在Web服务器和GETUTCDATE()数据库上使用。
DateTime.UtcNow
GETUTCDATE()
要将DateTime指定UTC时间的值转换为任何其他时区:
DateTime
var dt = DateTime.UtcNow; var tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); var localTimeInNewYork = TimeZoneInfo.ConvertTimeFromUtc(dt, tz);
另请参阅MSDN上的时区之间转换时间。