C#中将字符串转换为DateTime进行日期比较时报格式错误如何解决?
问题原因
Convert.ToDateTime依赖运行环境的默认区域文化设置解析日期字符串,当设备默认日期格式和2021-11-25 05:03:17.667的格式不匹配时,就会抛出格式错误。
解决方案
直接使用DateTime.ParseExact或者DateTime.TryParseExact方法,给两个日期字符串明确指定解析格式,搭配CultureInfo.InvariantCulture规避区域文化差异的影响。
代码示例
首先引入命名空间:
using System.Globalization;
固定格式解析版本:
// 提前定义两个日期对应的格式规则 const string formatDt1 = "MM/dd/yyyy HH:mm:ss"; const string formatDt2 = "yyyy-MM-dd HH:mm:ss.fff"; var dt1 = "11/25/2021 05:20:21"; var dt2 = "2021-11-25 05:03:17.667"; DateTime date1 = DateTime.ParseExact(dt1, formatDt1, CultureInfo.InvariantCulture); DateTime date2 = DateTime.ParseExact(dt2, formatDt2, CultureInfo.InvariantCulture); int result = DateTime.Compare(date1, date2); if (result < 0) { // d1 早于 d2 } else if (result > 0) { // d1 晚于 d2 } else { // 两个时间相等 }
如果需要做格式容错,避免异常抛出,可以用TryParseExact版本:
const string formatDt1 = "MM/dd/yyyy HH:mm:ss"; const string formatDt2 = "yyyy-MM-dd HH:mm:ss.fff"; var dt1 = "11/25/2021 05:20:21"; var dt2 = "2021-11-25 05:03:17.667"; if (DateTime.TryParseExact(dt1, formatDt1, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime date1) && DateTime.TryParseExact(dt2, formatDt2, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime date2)) { int result = DateTime.Compare(date1, date2); // 后续比较逻辑 } else { // 日期字符串格式不符合预期的异常处理 }
内容的提问来源于stack exchange,提问作者Kylie
相关产品推荐
相关产品推荐

