DateTime.TryParse 仅在 yyyy 失败

DateTime.TryParse fails at yyyy only

我有一个筛选字段,允许按可以不同格式输入的部分或完整日期进行搜索 - 也就是说,无论用户想要输入它的哪种方式,所以 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);

还是我做错了?

提前致谢!

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

我认为你不能只对年份使用 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.