0

我正在使用 ASP.NET 3.5 和 SQL Server 2008 编写日历网站,并希望以最佳方式处理时区。我已经阅读了这些资料:

夏令时和时区最佳实践

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

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

我已经记下了所有的一般信息,但是很难将其转换为实际代码。不是在找人为我编写代码,但如果我知道其他人为这个非常具体的案例做了什么(日历应用程序,事件的日期/时间,因为“东部时间下午 5 点”应该始终是“东部时间下午 5 点”,那么我会有所帮助。规则改变)。

你在使用 .NET DateTimeOffset 和 TimeZoneInfo 类吗?我不认为他们支持“使用 2011 年 1 月 2 日存在的规则将此 UTC 时间转换为 EST”之类的东西,我认为这是创建“正确”处理时区的日历应用程序所需的控制级别。我也不认为这样做的每个人都在使用 Noda Time,因为我几乎找不到任何关于该库的示例或讨论。可能Java版本用的比较多,但是很多app都是用.NET写的,那他们在干嘛呢?

4

1 回答 1

0

并不是真的认为这是正确的答案,但认为最好将其作为答案发布-如果这是正确的,也只是因为这样更容易阅读/遵循。

如果我朝着正确的方向前进,请告诉我:

  1. 使用 DateTimeOffset 和 TimeZoneInfo 类

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

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

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

这是别人正在做的吗?对#4 并不是很疯狂,因为我需要在 Windows 更新应用新规则的同时执行此操作……在 Windows 更新和我的数据库更新完成之间的任何时间,它都可能产生无效的查询结果。我想这就是“定期维护”的用途,但我们目前对此没有如此严格的政策。

于 2013-02-21T21:22:20.047 回答