2011-05-17 57 views
1

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

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

所有的日期和时间是在该数据库记录不是万能时间,所以我不想尝试和向后改变一切,以UTC(我也认为这是不适用)。

我知道如何检测用户的时区 - js和地理位置。事情是我不相信两者的准确性水平。最后,我想我会让管理员通过界面定义时区,用户将选择他想使用的那个。

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

+0

相关问题:http://stackoverflow.com/q/2532729/1583 – Oded 2011-05-17 08:36:32

回答

0

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

我会敦促你在你的数据库中使用UTC。如果你开始在同一个数据库中混合使用来自不同时区的日期时间,这将会回来咬你!

0

以UTC存储DateTimes绝对是我书中的最佳实践。转换现有数据可能有相当多的工作量,但如果在不同的时区已经有一些用户,那么从长远来看它可能是值得的(今天是两个,但很快它可能会是三,四....)这也会让避免夏令时转换等问题变得更容易,尤其是在夏令时开始和结束时间不同的地区(尤其是美国和英国之间的情况)时。 (我必须在我的系统中处理这些DateTime问题)。

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

应该不会太难关联与用户的用户或组,如果你不是已经在做了位置。只需添加时区信息及其位置,并在从您的输入创建DateTime对象时在代码中使用它。它意味着有人需要管理更多的数据,但与试图通过代码自动检测时区相比,它不会那么麻烦。

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

祝你好运,并写下你的转换周围的单元测试。