DateTime.TryParse仅在yyyy时失败

时间:2016-08-15 02:06:40

标签: c# datetime cultureinfo date-parsing

我有一个过滤字段,允许按部分或完整日期搜索,可以用不同的格式输入 - 也就是说,无论用户想要输入它的方式,所以TryParseExact看起来不是最好的选择。

问题是以下代码:

DateTime.TryParse(fromDate.Text, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateFromValue)

解析除yyyy字符串之外的所有内容。例如。 " 05/1980"和" 1980/05"被认定为{1/05/1980 12:00:00 AM},但" 1980"失败。

我怀疑解析器没有办法区分,比如yyyy和ffff,当它得到的是一个4位数序列时,但我仍然需要让它工作。是否有比

更优雅的方式来做到这一点
if(!DateTime.TryParse("1980", CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
    DateTime.TryParseExact("1980","yyyy",CultureInfo.InvariantCulture, DateTimeStyles.None, out date);

或者我是以错误的方式完成的?

提前谢谢!

2 个答案:

答案 0 :(得分:3)

我认为你不能仅使用年份使用DateTime.Parse,因为月份和日期不明确。使用具有特定日期格式的DateTime.ParseExact或DateTime.TryParseExact可以起作用。

你的if条件对我来说错了,你如何结合这两个条件?

if(!DateTime.TryParse("1980", CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
DateTime.TryParseExact("1980","yyyy",CultureInfo.InvariantCulture, DateTimeStyles.None, out date);

应该是:

if(DateTime.TryParse("1980", CultureInfo.InvariantCulture, DateTimeStyles.None, out date) ||
DateTime.TryParseExact("1980","yyyy",CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
// If the first parse success, use that. Otherwise, try to parse the year only with the parseexact.
// Notice the || and the first condition needs to be positive. 

答案 1 :(得分:0)

如果你想要部分匹配,最简单的方法是将日期视为一个字符串,只使用字符串匹配而不是依赖于日期格式。