B4n*_*ndt 23 c# timezone exception
当我为dt的这个特定值运行代码时,当我调用ConvertTimeToUtc方法时会抛出异常.我的本地机器timeZoneId是"GMT标准时间"
var tzi = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
var dt = new DateTime(1995, 4, 2, 2, 55, 0);
var t = TimeZoneInfo.ConvertTimeToUtc(dt, tzi);
例外是:
System.ArgumentException was unhandled
Message="The supplied DateTime represents an invalid time.  For example, when the clock is adjusted forward, any time in the period that is skipped is invalid.\r\nParameter 
Jon*_*eet 25
是的,那是绝对正确的.1995年4月4日中部标准时间凌晨2点55分,由于夏令时过渡,挂钟从早上2点跳到凌晨3点.这个例外似乎相当清楚.(使用"标准"在这里有点棘手;把它称为"中央时间"更有意义,其中包括"中央标准时间"和"中央日光时间",但这是另一回事.哎呀,我更喜欢奥尔森自己标识...)
在其他时候,当地时间可能不明确 - 如果时钟回溯一小时(或更长时间!),则本地时间可能会发生两次.
问题是:您希望代码在这种情况下如何表现?
有点不幸的是,异常只是ArgumentException- 在Noda Time中我们将对这个确切的情况有一个例外,这样就更容易发现和捕获.(我们也会有类似IsAmbiguous和IsSkipped的东西,所以你可以检查而不会发现异常.)
但基本的信息是,这不是BCL中的错误 - 这是故意的.
Eri*_* J. 18
可以测试使用的时间是否无效
TimeZoneInfo.IsInvalidTime
或者如果使用不明确
TimeZoneInfo.IsAmbiguousTime
如果它不明确,可以从中检索可以应用的一系列时间
TimeZoneInfo GetAmbiguousTimeOffsets
在交互式应用程序的情况下,可以提示用户进行说明.
BCL团队写了一篇关于这个主题的好博客
| 归档时间: | 
 | 
| 查看次数: | 7893 次 | 
| 最近记录: |