2014-03-25 108 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。