0
昨天乌拉圭改变它们的时钟,现在我一直看到异常转换特定的时候,他们的时区:NodaTime - 时间后,错误切换
ERROR Exception: - DateTime ConvertTimeToUtc(DateTime, String) (05/10/2014 02:31:00, America/Montevideo)
NodaTime.SkippedTimeException: Specified argument was out of the range of valid values.
Parameter name: Local time 05/10/2014 02:31:00 is invalid in time zone America/Montevideo
我理解本地时间如何无效:
“例如,假设时区在凌晨2点前进,所以01:59:59之后的第二个时刻变为03:00:00,在这种情况下,当地时间(如02:30:00)不会发生。
但是,我不明白(而且我可能需要更多的咖啡),这就是为什么NodaTime没有考虑到这一点?是否应该知道02:31现在是一个无效的当地时间 - 或者我应该做额外的处理来解释这个吗?
功能我打电话:
var timeZone = DateTimeZoneProviders.Tzdb[timezoneName];
var localTime = LocalDateTime.FromDateTime(timeToConvert).InZoneStrictly(timeZone);;
return DateTime.SpecifyKind(localTime.ToDateTimeUtc(), DateTimeKind.Utc);
感谢您的回答约翰。我已经添加了我要调用的功能。我现在明白将本地时间转换为UTC时会出现错误,我应该做一些不同的事情来获得当地时间吗? – FBryant87 2014-10-06 12:45:05
@ FBryant87:你真的不清楚你想达到什么,说实话 - 你从哪里得到timeToConvert?在某些情况下,它可能是合理的数据,例如如果你每天凌晨2:30有复发事件......那么你需要在凌晨2:30发生0或2次的一天中计算出这意味着什么。 – 2014-10-06 12:46:07
谢谢,我认为你的更新答案解释了一点,我会在InZoneLeniently上阅读。 – FBryant87 2014-10-06 13:11:37