2014-03-25 143 views
4

解析一些時候,我注意到了一個相當有趣的錯誤。DateTime無法解析HH:mm:ss格式的24:00:00

DateTime無法解析24:00:00。在一些谷歌搜索和堆疊,我發現DateTime只承認00 - 23(什麼?????),所以如果你的輸入是24:00:00,你運氣不好。你可能會認爲有人會放在一個條件等同24:00:0000:00:00(午夜),但尚未..

我的問題是,我該如何讓DateTime讓我來分析24:00:00

不幸的是,我不能在規範的原因下使用NodaTime(對不起喬恩,我愛你的圖書館)。下面

實驗:

An的2014-03-18 24:00:00input將提出以下錯誤。預期。

enter image description here


2014-03-18 23:59:59input會成功的解析。預期。

enter image description here


一個的input 2014年3月19日00:00:00`會成功的解析。預期。

enter image description here

+3

據我所知,沒有2400小時這樣的事情。它包裝到0000(至少在我見過的每一篇參考文獻中)。 –

+0

你在24點鐘看到24點鐘嗎?時間無效。那是另一天。 –

+0

所以你也希望2014-03-18 48:00:00成爲2014-09-20 00:00:00? –

回答

11

沒有 「24小時」。

The hour (HH/H, 24-hour clock) must be 0-23, inclusive。這就是爲什麼00:00:00有效,但24:00:00不是。

更改24:00:00至00:00:00(解析之前)以及(如果需要)根據需要提前一天(解析後)。


下面將以提供的格式(但僅限到第24小時)對時間進行處理,儘管它沒有考慮任意格式。支持不同的格式字符串只會增加其他複雜性

DateTime ParseWithTwentyFourthHourToNextDay (string input) { 
    var wrapped = Regex.Replace(input, @"24:(\d\d:\d\d)$", "00:$1"); 
    var res = DateTime.ParseExact(wrapped, "yyyy-MM-dd HH:mm:ss", null); 
    return wrapped != input 
     ? res.AddDays(1) 
     : res; 
} 
+2

只是想指出有一個'24:00'的時間:https://en.wikipedia.org/wiki/24-hour_clock#Midnight_00:00_and_24:00 - 但它不被'DateTime'類支持。 –

2

24:00:00不存在。這是00:00:00 - 23:59:59

1

解析之前,做一個簡單的搜索和替換 - '00:00:00'替換'24:00:00',然後像平常一樣解析。

1

爲什麼你想解析24:00:00作爲一個有效的時間表達,當它會像是說09:05:60。時間的屋頂是23:59:59.99999999999,之後,它變成了00:00:00。