You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:15:03