使用DateTime.TryParseExact验证XML Schema dateTime合规性

gea*_*dan 7 c# datetime xsd

我试图验证C#字符串是否符合XML Schema dateTime格式.看看MSDN,似乎"o","s"或"u"标准格式字符串都可以描述有效的dateTimes,但我无法让DateTime.ParseExact为我工作.我在这做错了什么?

string myDate = "1999-05-31T13:20:00.000-04:00";
DateTime.ParseExact(myDate, "o", CultureInfo.InvariantCulture, DateTimeStyles.None);
DateTime.ParseExact(myDate, "s", CultureInfo.InvariantCulture, DateTimeStyles.None);
DateTime.ParseExact(myDate, "u", CultureInfo.InvariantCulture, DateTimeStyles.None);
Run Code Online (Sandbox Code Playgroud)

以上都不是.对不起,如果我的格式不好:第一次在这里发布一个问题.

Fre*_*örk 14

由于您要测试数据是否符合XML,因此您可以使用以下XmlConvert.ToDateTime方法:

DateTime dt = XmlConvert.ToDateTime(myDate);
Run Code Online (Sandbox Code Playgroud)

FormatException如果给定的字符串没有正确的格式,这将抛出一个.


jas*_*son 9

只是使用XmlConvert.ToDateTime(注意现在XmlConvert.ToDateTime(string)被认为是过时的,你应该使用XmlConvert.ToDateTime(string, XmlDateTimeSerializationMode).

但是,如果您坚持使用DateTime.ParseExact(并且有充分的理由这样做,但是您应该使用DateTime.TryParseExact以避免在失败的情况下抛出异常),您可以使用以下格式字符串:

string format = "yyyy-MM-ddTHH:mm:ss.fffzzz";
Run Code Online (Sandbox Code Playgroud)

上面段落中的括号内容可能很难解析(我有这样做的习惯;对不起).