DateTime无法以HH:mm:ss格式解析24:00:00

the*_*age 7 c# datetime

解析一些时候我注意到了一个非常有趣的错误.

DateTime无法解析24:00:00.根据一些谷歌搜索和堆叠,我发现DateTime只能识别00 - 23(?????),所以如果你的输入是24:00:00,你运气不好.你会认为有人会把条件等同24:00:0000:00:00(午夜),但还没有......

我的问题是,我如何DateTime允许我解析24:00:00

不幸的是我不能NodaTime在规范原因下使用(对不起Jon.我喜欢你的图书馆).

实验如下:

一个input2014-03-18 24:00:00会出现以下错误.预期.

在此输入图像描述


一个input2014-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)

  • 只是想指出有一个'24:00`时间:https://en.wikipedia.org/wiki/24-hour_clock#Midnight_00:00_and_24:00 - 但是`DateTime`类不支持它. (2认同)