我正在研究需要每天运行24H的应用程序,并且正在努力正确实施对DST的支持。所有时间都以UTC格式保存,但当我尝试在当地时间显示时遇到问题。现在我使用savedDate.ToLocalTime()
从DB值转换为本地时间进行显示。这似乎工作正常,除了当我更改时区信息以尝试测试DST时。如果我在客户端PC上修改时区,则显示不会随新时区更新。有没有更好的方法来测试DST,还是我的转换为本地时间对于这种情况不正确?在24H应用程序中处理DST
回答
我记得读,或许对于Compact Framework的,有关.NET不是最可靠的,当谈到关于DST报告。更可靠的是获取当地时间和UTC的当前时间,然后确定(并在将来的调整中使用)自己的差异。如果没有必要,这似乎是一条可怕的路线。我会看看如果我能找到一个参考备份我记得我认为。
你在做什么,确切地说,是改变工作站上的时区?
我正在更改我的系统时钟从东部时间到大西洋时间的时区。这是为了通过保持我的本地盒子的UTC时间相同来测试DST,但它具有当地时间变化。 – 2009-06-05 19:50:59
嗯。你预计实际上必须改变时区,而应用程序正在运行?如果框架在第一次获取后缓存它,我不会感到惊讶。
我会在设备上设置时区,改为“只是更改为DST之前”,运行应用程序并检查它正确地报告倍的时间。然后将时间更改为“刚刚更换DST之前”。
记住,根据您的设备和时区数据库的年龄,它可能不知道,几年前在美国改变DST。 (啊,时区,得爱他们)
如果您从数据库中检索DateTime值,您通常会得到一个Date属性设置为DateTimeKind.Unspecified的DateTime。基本上,因为我知道的任何特定于数据库的DateTime类型(例如SqlDateTime)都不包含时区信息。
如果然后尝试这个本地时间使用savedDate.ToLocalTime()“转换”,你会得到过去存储,无需任何转换相同的日期时间值。
你需要做的是表明,所保存的日期是UTC执行转换之前,是这样的:
DateTime savedDateTime = (DateTime) reader["SomeDateTimeColumn"];
// Convert from unspecified to UTC
DateTime utcDateTime = savedDateTime.SpecifyKind(savedDateTime, DateTimeKind.Utc);
...
// Convert from UTC to local
DateTime localDateTime = utcDateTime.ToLocalTime();
我发现一些的.Net CF 2.0版本不正确地之间做翻译时间UTC和当地时间。这些问题围绕着几年前发生在美国时区的变化。
的症状是DST似乎不被视为生效,直到四月(旧规则),而不是三月(新规则)。据推测,DST变更的后端(10月/ 11月)也存在问题。
到目前为止,我还没有找到有关可能是翻译正确工作所需的最小构建的信息。
注意这不是通过应用操作系统DST修复(其,很明显,也应该被安装)固定。据我所知,它完全是CF的内在特征。我没有尝试过所有的组合,但要小心。
如果你想在CF准确的翻译,你只有两种选择:
自己做转换(非常复杂的,刚性的,且容易出错)。
确保您在设备上有必要的.Net和OS补丁,以便翻译准确。
你也许能够找到一个适合你的类库。一个很有前途的课程是World Clock/Code Project),但不幸的是它依赖于CF中不可用的注册表信息。因此,它不能直接移植到CF上。
然后最后,任何自己的解决方案都需要提供时区信息(UTC偏移,DST开/关日期等)。并在任何时候都准确。
对不起,这个坏消息。
- 1. 在iPhone应用程序中处理Cookie
- 2. 在Eclipse中处理android应用程序
- 3. 处理AIR应用程序
- 4. 处理lite应用程序
- 5. 处理应用程序:willChangeStatusBarFrame:
- 6. 在应用程序结算 - 处理IN_APP_NOTIFY
- 7. 与Web应用程序在Python处理
- 8. Swift应用程序中的预处理
- 9. 使用不同的线程在web应用程序中处理
- 10. 在主线程中处理wpf应用程序中的呼叫
- 11. 从iphone应用程序的信用卡处理应用程序
- 12. 在ios应用程序中处理理想的超时时间
- 13. 在Tornado应用程序中优雅地处理应用程序异常
- 14. 在中断处理程序
- 15. Spring Boot Undertow在同一应用程序中添加阻塞处理程序和NIO处理程序
- 16. 在上游通道处理程序中应用线程池
- 17. SQLAlchemy在多线程应用程序中正确处理会话
- 18. 事件在Java中使用通用处理程序处理
- 19. branch.initSessionWithLaunchOptions处理程序在应用程序退出时触发
- 20. ProgressBar与Android应用程序中的处理程序倒计时
- 21. 如何从应用程序中删除事件处理程序?
- 22. 从另一个应用程序中的活动处理程序?
- 23. Web应用程序中的处理程序
- 24. C#方法TimeZoneInfo.ConvertTime处理DST吗?
- 25. 处理应用程序重新设计
- 26. WPF应用程序错误处理
- 27. 同时处理应用程序和库?
- 28. Java Web应用程序内存处理
- 29. Saas应用程序的支付处理
- 30. Android - 应用程序最小化处理
我想我可能会在下面的答案中产生混淆。这是精简版框架,还是不是?虽然我们在这里,你使用的是什么版本的.NET Framework? – lance 2009-06-05 19:44:09
我使用的是.NET 2.0,而不是Compact Framework。 – 2009-06-05 19:47:38