相同格式下DateTime解析结果不一致的原因及解决方案
问题原因
CultureInfo.InvariantCulture默认的短日期解析规则是 MM/dd/yyyy(月/日/年)格式:- 第一个日期
10/10/2021的月和日数值都是10,刚好符合规则,所以解析成功 - 第二个日期
18/11/2021的首位数值是18,超出了月份的有效值范围(1-12),解析直接失败,输出的secondDate是DateTime类型的默认值1/1/0001 12:00:00 AM
- 第一个日期
- 你输入的两个日期实际是 dd/MM/yyyy(日/月/年)格式,和默认规则不匹配,才会出现看起来格式一致但第二个解析失败的情况。
修复方案
改用DateTime.TryParseExact方法,明确指定和输入匹配的格式字符串,避免依赖默认解析规则的歧义问题。
修改后的代码示例:
// 明确指定输入的日期格式为 日/月/年 时:分:秒 string dateFormat = "dd/MM/yyyy HH:mm:ss"; bool first = DateTime.TryParseExact("10/10/2021 00:00:00", dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime firstDate); bool second = DateTime.TryParseExact("18/11/2021 23:59:59", dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime secondDate); Console.WriteLine(firstDate + " --- " + secondDate);
修改后两个日期都会被正确解析,输出结果和预期一致。
内容的提问来源于stack exchange,提问作者Axajkamkat
相关产品推荐
相关产品推荐

