解析一些时候我注意到了一个非常有趣的错误.
DateTime无法解析24:00:00.根据一些谷歌搜索和堆叠,我发现DateTime只能识别00 - 23(?????),所以如果你的输入是24:00:00,你运气不好.你会认为有人会把条件等同24:00:00于00:00:00(午夜),但还没有......
我的问题是,我如何DateTime允许我解析24:00:00?
不幸的是我不能NodaTime在规范原因下使用(对不起Jon.我喜欢你的图书馆).
实验如下:
一个input的2014-03-18 24:00:00会出现以下错误.预期.

一个input的2014-03-18 23:59:59会成功的解析.预期.

一个input2014-03-19 00:00:00`将成功解析.预期.

use*_*740 14
DateTime类中没有"24小时"支持.
小时(HH/H,24小时制)必须为0-23(含).这就是为什么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;
}
Run Code Online (Sandbox Code Playgroud)