事件的时区感知 asp.net 网站:UTC 与本地日期时间



我正在开发一个 asp.net 网站,客户端创建事件,用户注册这些活动。在阅读了大量有关如何存储和显示日期时间的主题之后,我仍然对选择哪条路线感到困惑。

最被接受的解决方案(在搜索主题之后)是以UTC存储所有内容,并减去客户端的时区偏移量以进行显示。另一种方法是将日期时间存储在事件的时区(事件位置的本地时间,而不是服务器)中,并在请求时按原样向客户端显示。那不是更有效率吗?我错过了什么吗?夏令时是否以这种方式考虑在内?

提前谢谢。

以 UTC 存储所有内容是标准,这是有原因的。

您以本地时间存储事件的替代方法将导致不同时区的用户混淆事件实际发生的时间。

使用事件的位置时区作为参考点,我们可以执行此操作来获取当前本地时间(在 .NET 3.5 或 4.0 中):

string EventTimeZoneId = "GTB Standard Time"; // for instance, this should be stored in DB as varchar[32]
DateTime EventLocalTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, EventTimeZoneId);

这也考虑了夏令时。我能想到的唯一缺点是,如果客户端在创建事件时选择了错误的时区,那么所有注册的时间都将错误。

如果您使用的是 C# asp.net

  1. 存储在数据库中

DateTime currntDate= DateTime.SpecifyKind(DateTime.Now, 日期时间种类.未指定);var _utc = TimeZoneInfo.ConvertTimeToUtc(CurrntDate, TimeZoneInfo.Local);

  1. 从数据库获取日期并根据客户端时区和显示进行转换。

它将在您的业务逻辑中保持一致性。

相关内容

  • 没有找到相关文章

最新更新