我正在一个 asp.net 网站上工作,客户端创建事件并且用户注册这些事件。在阅读了大量关于如何存储和显示日期时间的主题之后,我仍然对采取哪条路线感到困惑。
最被接受的解决方案(在搜索主题之后)是将所有内容存储在 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);
这也考虑了夏令时。我能想到的唯一缺点是,如果客户端在创建事件时选择了错误的时区,那么所有注册都会有错误的时间。
将所有内容存储在 UTC 中是有原因的标准。
您将事件存储在当地时间的替代方案会导致不同时区的用户对事件实际发生的时间感到困惑。
如果您使用的是 c# asp.net
DateTime CurrntDate= DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Unspecified); var _utc = TimeZoneInfo.ConvertTimeToUtc(CurrntDate, TimeZoneInfo.Local);
它将在您的业务逻辑中保持一致性。