我正在尝试从数据源解析传入日期(无法更改)。它给了我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。
答案 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”输入之间的差异,那么您可能还可以。