为了概述我的项目,我有一个 ASP.NET WebForm 应用程序,它允许用户登录并安排事件。事件处理由我为其编写 Windows 服务的本地 Windows 服务器处理和分派(dispatch)。
一切正常,除了我有一些客户从东海岸登录,一些客户从西海岸登录。
有人可以建议我如何处理时区差异的可能工作流程吗?时区信息已经存储在每个客户端的数据库中。 我只是对如何应用时区信息感到困惑。
我知道DateTime
有一个 ToUniversalTime()
方法,但它让我对它的工作方式感到困惑,因为它几乎似乎需要知道 DateTime
的时区。结构是为了能够将其转换为世界时间,据我所知,一个 DateTime
结构没有在结构中内置时区信息。
谁能给我解释一下吗?
最佳答案
如果事件计划发生一次,将其存储为DateTimeOffset
或UTC DateTime
是有意义的。如果将其存储为 DateTimeOffset
,您仍然可以使用相关偏移量将其显示给用户 - 事实上,您可以将其显示给处于其他时区的人,作为他们的本地时间,或者作为原始用户的本地时间,并带有一个指示符,表明它与查看者的本地时间不同(如果您明白我的意思)。
如果它是反复出现的(例如“每天凌晨 4 点”),那么这还不够,因为它不会考虑夏令时的变化。相反,您应该存储本地 时间和时区标识符。请参见 TimeZoneInfo.Id
和 TimeZoneInfo.FindSystemTimeZoneById
。
作为一个明目张胆的插件,您不妨考虑使用 Noda Time API 作为内置类型的更具表现力的替代方案...
几乎可以肯定,您应该不使用DateTime.ToUniversalTime()
,因为它使用系统时区(即在您的服务器上) ,这几乎肯定是无关紧要的。
关于c# - 处理时区的工作流程建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13180013/