ISO 8601值24:00:00的解析日期失败

时间:2014-01-02 09:28:08

标签: c# datetime iso8601

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

在.Net中,它无法将其解析为有效时间。

维基百科声明它应该是有效的格式。 Wikipedia ISO 8601

来自https://stackoverflow.com/a/3556188/645410

的示例

如果没有令人讨厌的字符串检查黑客,我怎么能这样做?

示例(小提琴:http://dotnetfiddle.net/oB7EZx):

var strDate = "2007-04-05T24:00";       
Console.WriteLine(DateTime.Parse(strDate, null, DateTimeStyles.RoundtripKind));

抛出:

  

日历中不支持字符串表示的DateTime   System.Globalization.GregorianCalendar。

1 个答案:

答案 0 :(得分:4)

是的,据我所知,.NET不支持这一点。

我的Noda Time项目有,但只是部分:它可以解析值,但是这个值只是解析为第二天开始时的午夜,并且是从不格式化为24:00。 Noda Time概念模型中没有任何内容可以代表“当天的结束”。

示例代码以显示可能的内容:

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”输入之间的差异,那么您可能还可以。