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

ama*_*eur 1 c# sql datetime cultureinfo utc

我目前正在开发带有后端 SQL Server 数据库的 ac# Web 应用程序。我在日期方面有一些问题需要解决。

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

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

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

Jon*_*Jon 5

所有内容在创建时都应采用 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);
Run Code Online (Sandbox Code Playgroud)

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