2013-02-21 86 views
0

我正在使用ASP.NET 3.5和SQL Server 2008编写日历网站,并希望以最佳方式处理时区。我读过这些来源:在ASP.NET中创建日历应用程序,处理时区

Daylight saving time and time zone best practices

http://noda-time.blogspot.com/

http://msdn.microsoft.com/en-us/library/ms973825.aspx

我已经得到了所有的一般信息,但有一个艰难的时间将其转换为实际的代码。不寻找某人为我编写代码,但是如果我知道其他人为这个特定情况做了什么(日历应用程序,事件的日期/时间,因为“东部时间下午5点”始终应该是“东部下午5点”规则改变)。

您是否使用.NET DateTimeOffset和TimeZoneInfo类?我没有看到他们支持像“使用2011年1月2日发布的规则将此UTC时间转换为EST”这样的内容,我认为这是您需要创建一个“正确”处理时区的日历应用程序所需的控制级别。我也不认为每个人都在使用野田时间,因为我几乎找不到有关该图书馆的任何示例或讨论。 Java版本可能被大量使用,但很多应用程序都是用.NET编写的,那么他们在做什么?

回答

0

不是真的认为这是正确的答案,但认为最好是发表一个答案 - 这是错误的机会,这是正确的,也只是因为它更容易阅读/遵循这种方式。

请让我知道如果我前往正确的方向:

  1. 使用的DateTimeOffset和的TimeZoneInfo类

  2. 在数据库中保存的DateTimeOffset值和偏移量。还保存TimeZoneInfo.id(tz id)。

  3. 在使用数据库中的值之前,始终将保存的偏移量与当前的TimeZoneInfo偏移量进行比较,并根据差异调整DateTimeOffset值。这就是修正“政府改变规则”的问题,并将“东部时间下午4点”的时间保留为“东部时间下午4点”(即使由于新规则而导致UTC的偏移量已发生变化)。

  4. 为了使寻找特定日期/时间或范围的查询工作,只要规则发生变化(通过govt),请通过并“修复”数据库中的每条记录。修复与上面#3使用的步骤相同,但在修复后保存新值。

这是别人在做什么? #4并不是真正的疯狂,因为我需要在Windows更新与新规则一起应用的同时做到这一点......任何时候在Windows更新和我的数据库更新完成之间,它都可能产生无效的查询结果。我想这就是“定期维护”的目的,但我们目前没有这样严格的政策。