我正在开发为 365 年 7 月 24 日运行的 GPS 设备运行报告的软件。部分报告输出要求我们将存储的数据库时间(以中部标准时间保存)转换为用户计时器(任何请求的时区)。一年两次,当人们运行在时间更改之前开始并在时间更改之后结束的报告时,我们会遇到 DST 问题。它在一行失败:
return TimeZoneInfo.ConvertTime(dateToConvert, DatabaseTime, UserTime);
dateToConvert
是要转换的 DateTime
。 DatabaseTime
和 UserTime
都是 TimeZoneInfo
对象。我没有做任何棘手或复杂的事情,但 DST 时间更改附近的 DateTimes 抛出异常。例如 3/10/2013 2:02:11 AM
,即使它正在从中部时间“转换”为中部时间。
处理 DateTimes 接近 DST 时间变化的最佳方法是什么?
最佳答案
您的数据库中有垃圾,3/10/2013 2:02:11 AM 从未存在过。那天早上 1:59 AM 之后的那一分钟是 3:00 AM,时钟移动了一个小时。 .NET 不会容忍那个垃圾日期。
您将需要找出垃圾时间戳是如何在您的数据库中结束的。很明显,从一个时区到另一个时区的时间转换无视夏令时规则,比如在一个时区中激活但在另一个时区中不激活,很可能是这种垃圾的来源。如果您无法修复您的数据库以使用 UTC,那么至少在您的代码中执行此操作。首先在一个时区转到 UTC,然后在另一个时区返回本地时间。使用 TimeZoneInfo 类、ConvertTimeFrom/ToUtc 方法。
关于c# - 转换接近夏令时的日期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15482809/