1

我需要解析可能采用“ddMMyyyy”格式以及标准 GB 英语格式(例如“dd/mm/yyyy”)的日期,我正在尝试使用该DateTime.TryParse()方法来执行此操作,但它没有t 识别“ddMMyyyy”格式。

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

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

4

3 回答 3

1

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

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

于 2013-03-22T13:40:56.987 回答
0

如何使用 DateTime.TryParseExact MSDN 链接

于 2013-03-22T13:08:25.863 回答
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))。

if不过,老实说,在语句中只使用 String.Contains("/") 可能会更有效。

于 2013-03-22T13:45:56.503 回答