支持使用不同的时区

时间:2011-05-17 08:31:04

标签: c# javascript asp.net timezone

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

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

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

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

这是正确的方法吗?这是什么最好的做法? 非常10q。

2 个答案:

答案 0 :(得分:0)

我认为让管理员为一组用户定义时区的方法很有意义。您经常会发现人们在桌面PC上定义了错误的时区,增加了另一个复杂因素。如果你明确地设置它,那么你是安全的。

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

答案 1 :(得分:0)

以UTC格式存储DateTime绝对是我书中的最佳做法。转换现有数据可能需要相当多的工作,但如果你已经在不同的时区拥有一些用户,那么从长远来看它可能是值得的(今天它只有两个,但不久它可能是三个,四个....)它还可以更容易避免夏令时转换等问题,特别是如果这些群体位于夏令时开始和结束不同的地区,美国和英国之间就是这种情况。 (我必须在我的系统中处理这些DateTime问题。)

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

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

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

祝你好运,并在你的转换中写下大量的单元测试。