【问题标题】:enable working with different timezones允许使用不同的时区
【发布时间】:2011-08-27 01:24:13
【问题描述】:

我有一个 asp.net + c# 应用程序,它使用 System.DateTime.now 来记录员工的工作时间。该应用程序在线,最近我有用户从我的国家以外的地方连接到它。

我有一个客户希望他在国外工作的员工根据他们的时区记录他们的工作时间。

数据库中记录的所有日期和时间都不是通用时间,所以我不想尝试将所有内容向后更改为 UTC(我也认为这不适用)。

我知道检测用户时区-js 和地理位置的方法。问题是我不相信两者的准确性。总之,我想我会让管理员通过界面定义时区,然后用户会选择他希望使用的时区。

这是正确的方法吗?对此的最佳做法是什么? 10q非常多。

【问题讨论】:

标签: c# javascript asp.net timezone


【解决方案1】:

我认为您让管理员为一组用户定义时区的方法很有意义。您经常会发现人们在他们的台式电脑上定义了错误的时区,这增加了另一个复杂性。如果你明确地设置它,你是安全的。

我强烈建议您在数据库中使用 UTC。如果你开始在同一个数据库中混合来自不同时区的 DateTimes,这将会回来咬你!

【讨论】:

    【解决方案2】:

    在我的书中,将 DateTimes 存储为 UTC 绝对是最佳实践。转换现有数据可能需要相当多的工作,但从长远来看,如果您已经有几个不同时区的用户(今天是两个,但很快可能是三个、四个),这可能是值得的....) 它还可以更轻松地避免诸如夏令时转换之类的问题,特别是如果这些组位于夏令时的开始和结束不同的地区,美国和英国之间就是这种情况(我必须在我的系统中处理这些 DateTime 问题)。

    当数据输入到您的 UI 时,我不会依赖任何自动检测用户的时区。我要做的第一件事是将数据库中的用户与时区属性相关联。听起来您的用户不会改变他们的时区(如果有的话)。

    如果您还没有将位置与用户或用户组相关联,应该不会太难。只需添加时区信息及其位置,并在从您的输入创建 DateTime 对象时在您的代码中使用它。这意味着需要有人管理更多的数据,但它会比尝试通过代码自动检测时区更容易。

    由于您要添加新时区,因此很容易错过转化。我建议确保您的所有 DateTime 逻辑都是集中的(扩展方法或辅助类,具体取决于您的框架版本)。将所有转换和字符串格式保存在一个地方,并确保所有代码都引用它。

    祝你好运,围绕转换编写大量单元测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 2016-05-15
      • 2018-06-05
      • 2021-10-20
      • 1970-01-01
      相关资源
      最近更新 更多