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

时间:2012-04-06 17:12:20

标签: asp.net datetime timezone utc

我正在开发一个asp.net网站,客户创建活动和用户注册这些活动。在详细阅读了如何存储和显示日期时间之后,我仍然对于采取哪条路线感到困惑。

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

提前致谢。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

使用事件的位置时区作为参考点,我们可以这样做以获取当前本地时间(在.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);

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

答案 2 :(得分:0)

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

  1. 存储在DB
  2.   

    DateTime CurrntDate = DateTime.SpecifyKind(DateTime.Now,   DateTimeKind.Unspecified); var _utc =   TimeZoneInfo.ConvertTimeToUtc(CurrntDate,TimeZoneInfo.Local);

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