如何让DateTime.TryParse以“ddMMyyyy”格式解析日期?

时间:2013-03-22 12:46:43

标签: asp.net vb.net

我需要解析可能采用“ddMMyyyy”格式以及标准GB英语格式的日期(例如“dd / mm / yyyy”),并且我正在尝试使用DateTime.TryParse()这样做的方法,但它不能识别“ddMMyyyy”格式。

我知道我可以使用Date.TryParseExact()并且每次都指定自定义格式,但这意味着对每个日期进行两次检查(一种用于自定义格式,一种用于文化的标准格式),它似乎就在那里必须是更好的方式。

有没有办法让DateTime.TryParse()方法识别自定义日期格式以及标准格式?

3 个答案:

答案 0 :(得分:1)

我认为不可能将DateTime.TryParse()设置为同时识别两种日期格式中的任何一种。查看DateTime.TryParse() .TryParse(String, DateTime)TryParse(String, IFormatProvider, DateTimeStyles, DateTime)的替换,因此此处的最大灵活性允许您提供可能是IFormatProvider类的DateTimeFormatInfo,但是DateTimeFormatInfo一次只能处理一组格式。

一次尝试(我没试过)将创建一个具有不同LongDatePattern和ShortDatePattern模式的新DateTimeFormatInfo类(匹配您想要使用的模式),并将该实例作为参数传递给{{ 1}},但用TryParse检查两次似乎更合理。

答案 1 :(得分:0)

如何使用DateTime.TryParseExact MSDN link

答案 2 :(得分:0)

我担心日期解析器往往不太聪明,主要是设计。虽然您可能想要解析"ddMMyyyy"日期,但其他人可能想要解析"yyyyMMdd"日期。在某些情况下,这些可能是相同的("20121220"是什么?)。解析器很笨,您必须告诉它使用哪种格式。如果您指定多种格式,则需要一次尝试一种格式,这正是您要避免的。

如果你真的只想要一次通过,你可以使用正则表达式来提取相关部分("(?<Day>\d{2})/?(?<Month>\d{2})/?(?<Year>\d{4})"),然后将其重构为解析器识别的格式(string.Format("{0}/{1}/{2}", match.Groups["Day"].Value, match.Groups["Month"].Value, match.Groups["Year"].Value))。 / p>

老实说,在if语句中使用String.Contains(“/”)可能更有效。

相关问题