我有一个过滤字段,允许按部分或完整日期搜索,可以用不同的格式输入 - 也就是说,无论用户想要输入它的方式,所以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);
或者我是以错误的方式完成的?
提前谢谢!
答案 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)
如果你想要部分匹配,最简单的方法是将日期视为一个字符串,只使用字符串匹配而不是依赖于日期格式。