我正在尝试解析来自数据源的传入日期(无法更改)。它给了我 ISO 8601 格式示例的时间:2007-04-05T24:00
.
然而在 .Net 中它无法将其解析为有效时间。
维基百科指出它应该是有效的格式。维基百科 ISO 8601 http://en.wikipedia.org/wiki/ISO_8601
示例来自https://stackoverflow.com/a/3556188/645410 https://stackoverflow.com/a/3556188/645410
我怎样才能做到这一点而不需要令人讨厌的字符串检查黑客?
示例(小提琴:http://dotnetfiddle.net/oB7EZx http://dotnetfiddle.net/oB7EZx):
var strDate = "2007-04-05T24:00";
Console.WriteLine(DateTime.Parse(strDate, null, DateTimeStyles.RoundtripKind));
Throws:
日历中不支持字符串表示的日期时间
System.Globalization.GregorianCalendar。
是的,据我所知,.NET 不支持这一点。
My 野田时间 http://nodatime.org项目做到了,但只是部分:它可以parse该值,但该值只是解析到第二天开始时的午夜,并且是never格式为 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”输入之间的差异,那么您可能没问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)