1

我目前正在开发带有后端 sql 服务器数据库的 ac# web 应用程序。我有一些关于日期的问题需要解决。

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

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

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

4

1 回答 1

4

一切都应该在 UTC(不是服务器的时区;UTC)中创建并在显示之前转移到用户的时区。

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

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

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

另请参阅MSDN 上的在时区之间转换时间。

于 2012-10-04T20:58:55.653 回答