如何让DateTime.TryParse在仅传入时间时返回false
问题描述
现有代码如下:
DateTime d; return DateTime.TryParse(value.ToString(), out d);
目前当传入"3:35:45"时,该方法会成功解析,返回的DateTime对象为该时间加上当日日期。
但我希望仅传入时间时解析失败,即要求必须包含日期部分!
- 注意:无法指定如
yyyy-mm-dd这类特定日期时间格式来使用TryParseExact - 注意2:解决方案不局限于
TryParse,任何能实现仅传入时间时判定为无效DateTime的方案均可
解决方案
方法一:利用DateTimeStyles.NoCurrentDateDefault参数判断
DateTime.TryParse在仅解析时间时,若指定DateTimeStyles.NoCurrentDateDefault参数,会将日期部分设为DateTime.MinValue.Date(即0001年1月1日)。通过判断解析后的日期是否为这个默认值,就能区分输入是否包含有效日期:
DateTime d; if (DateTime.TryParse(value.ToString(), null, DateTimeStyles.NoCurrentDateDefault, out d)) { // 解析后的日期不是默认最小日期,说明输入包含日期部分 return d.Date != DateTime.MinValue.Date; } // 本身解析失败直接返回false return false;
方法二:结合输入字符串特征校验
可以额外检查输入字符串是否包含日期相关的分隔符(如-、/、.),同时配合上述参数判断,进一步提升准确性:
string input = value.ToString(); DateTime d; if (DateTime.TryParse(input, null, DateTimeStyles.NoCurrentDateDefault, out d)) { bool hasDateSeparator = input.Contains("-") || input.Contains("/") || input.Contains("."); return d.Date != DateTime.MinValue.Date && hasDateSeparator; } return false;
内容的提问来源于stack exchange,提问作者LonelySemiColon
相关产品推荐
相关产品推荐

