c# - 处理时区的工作流程建议

标签 c# asp.net timezone timezone-offset

为了概述我的项目,我有一个 ASP.NET WebForm 应用程序,它允许用户登录并安排事件。事件处理由我为其编写 Windows 服务的本地 Windows 服务器处理和分派(dispatch)。

一切正常,除了我有一些客户从东海岸登录,一些客户从西海岸登录。

有人可以建议我如何处理时区差异的可能工作流程吗?时区信息已经存储在每个客户端的数据库中。 我只是对如何应用时区信息感到困惑。

我知道DateTime有一个 ToUniversalTime()方法,但它让我对它的工作方式感到困惑,因为它几乎似乎需要知道 DateTime 的时区。结构是为了能够将其转换为世界时间,据我所知,一个 DateTime结构没有在结构中内置时区信息。

谁能给我解释一下吗?

最佳答案

如果事件计划发生一次,将其存储为DateTimeOffset 或UTC DateTime 是有意义的。如果将其存储为 DateTimeOffset,您仍然可以使用相关偏移量将其显示给用户 - 事实上,您可以将其显示给处于其他时区的人,作为他们的本地时间,或者作为原始用户的本地时间,并带有一个指示符,表明它与查看者的本地时间不同(如果您明白我的意思)。

如果它是反复出现的(例如“每天凌晨 4 点”),那么这还不够,因为它不会考虑夏令时的变化。相反,您应该存储本地 时间和时区标识符。请参见 TimeZoneInfo.IdTimeZoneInfo.FindSystemTimeZoneById

作为一个明目张胆的插件,您不妨考虑使用 Noda Time API 作为内置类型的更具表现力的替代方案...

几乎可以肯定,您应该使用DateTime.ToUniversalTime(),因为它使用系统时区(即在您的服务器上) ,这几乎肯定是无关紧要的。

关于c# - 处理时区的工作流程建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13180013/

相关文章:

c# - 从给定的时间戳字符串中查找时区和时间

c# - 如何使用 XmlSerializer 将简单集合反序列化为 List<string> 的实例

c# - 如果 Eval 不为空,如何有选择地在 GridView 中显示按钮?

c# - 如何实现邮件验证组件

timezone - Impala 时间戳与 Hive 不匹配 - 时区问题?

go - 如何通过 utc 偏移量加载位置

c# - 将自定义 DataContractResolver 与多个程序集一起使用

c# - 使用异步调用时 Entity Framework 挂起

c# - 将 DataTemplate 中的按钮绑定(bind)到表单的 ViewModel 中的命令

asp.net - EF6 等效于 EF Core 的 QueryTrackingBehavior.NoTracking