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