C# ISO 8601值的分析日期24:00:00失败

C# ISO 8601值的分析日期24:00:00失败,c#,datetime,iso8601,C#,Datetime,Iso8601,我正试图解析来自数据源(无法更改)的传入日期。它给了我ISO 8601格式的时间示例:2007-04-05T24:00 然而,在.Net中,它无法将此解析为有效时间 维基百科声明它应该是有效的格式 来自 如果没有讨厌的字符串检查黑客,我怎么能做到这一点 示例(小提琴:): 抛出: 日历中不支持由字符串表示的日期时间 System.Globalization.Gregorianalendar 是的,据我所知,.NET不支持此功能 我的项目可以,但只是部分:它可以解析值,但值只解析到第二天开始时的午

我正试图解析来自数据源(无法更改)的传入日期。它给了我ISO 8601格式的时间示例:
2007-04-05T24:00

然而,在.Net中,它无法将此解析为有效时间

维基百科声明它应该是有效的格式

来自

如果没有讨厌的字符串检查黑客,我怎么能做到这一点

示例(小提琴:):

抛出:

日历中不支持由字符串表示的日期时间 System.Globalization.Gregorianalendar


是的,据我所知,.NET不支持此功能

我的项目可以,但只是部分:它可以解析值,但值只解析到第二天开始时的午夜,并且从未格式化为24:00。野田佳彦时间概念模型中没有任何东西可以代表“一天的结束”

显示可能的示例代码:

using System;
using NodaTime;
using NodaTime.Text;

class Test
{
    static void Main()
    {
        string text = "2007-04-05T24:00";
        var pattern = LocalDateTimePattern.CreateWithInvariantCulture
             ("yyyy-MM-dd'T'HH:mm");
        var dateTime = pattern.Parse(text).Value;
        Console.WriteLine(pattern.Format(dateTime)); // 2007-04-06T00:00
    }
}

如果您不介意丢失“2007-04-05T24:00”和“2007-04-05T00:00”输入之间的差异,那么您可能没事。

请注意,由于虚线的原因,您的日期部分是ISO-8601-Ext。C#也同样挑剔吗?我试着没有破折号,但它给了我一个例外:“字符串未被识别为有效的日期时间。”
是的,.NET据我所知不支持这一点
。那不是在什么地方吗?你似乎就是那个“知道”这些事情的人,对吧@bas如果你看,没有格式支持
24
作为一小时。@bas:嗯,“HH”自定义格式说明符被记录为:“小时,使用24小时时钟从00到23。”谢谢Jon,这解决了我的问题。我从SAP XML exports导入时出错。@Chris:很高兴听到:)无可否认,我们很幸运Noda Time做到了这一点-我想我在阅读ISO-8601时碰巧发现了它。。。
using System;
using NodaTime;
using NodaTime.Text;

class Test
{
    static void Main()
    {
        string text = "2007-04-05T24:00";
        var pattern = LocalDateTimePattern.CreateWithInvariantCulture
             ("yyyy-MM-dd'T'HH:mm");
        var dateTime = pattern.Parse(text).Value;
        Console.WriteLine(pattern.Format(dateTime)); // 2007-04-06T00:00
    }
}