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

Time zone aware asp.net website for events: UTC vs local datetime

我正在一个asp.net网站上工作,客户创建事件和用户注册这些事件。 在阅读了关于如何存储和显示日期时间的主题后,我仍然对于采取哪条路线感到困惑。

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

提前致谢。


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

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

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


将所有内容存储在UTC中是出于某种原因的标准。

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


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

  • 存储在DB中
  • DateTime CurrntDate= DateTime.SpecifyKind(DateTime.Now,
    DateTimeKind.Unspecified); var _utc =
    TimeZoneInfo.ConvertTimeToUtc(CurrntDate, TimeZoneInfo.Local);

  • 从db获取日期并根据客户端时区进行转换并显示。
  • 它将使您的业务逻辑保持一致。