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

C#对比DateTime仅校验日期部分报类型不匹配错误如何解决

报错原因

你遇到的类型不匹配报错,是因为尝试将DateTime类型的DateTime.Now直接和字符串类型的格式化结果做相等判断,两种不同类型默认不能直接用==/!=运算符对比。

先修正原有代码的隐藏bug

DateTime是不可变值类型,AddDays()方法不会修改原变量,只会返回计算后的新DateTime对象,你现有代码中所有day.AddDays(xxx)都没有赋值回day,日期计算结果完全不生效,需要先调整这部分逻辑。

仅对比日期部分的实现方案

不需要转字符串对比,直接使用DateTime自带的Date属性即可。Date属性会返回当前值的日期部分,时间部分固定为00:00:00,两个DateTime值只要日期相同,Date属性的对比结果就为相等。

修正后完整可运行代码

DateTime day = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
            
switch (day.DayOfWeek)
{
    case DayOfWeek.Sunday:
        day = day.AddDays(17);
        break;
    case DayOfWeek.Monday:
        day = day.AddDays(16);
        break;
    case DayOfWeek.Tuesday:
        day = day.AddDays(15);
        break;
    case DayOfWeek.Wednesday:
        day = day.AddDays(21);
        break;
    case DayOfWeek.Thursday:
        day = day.AddDays(20);
        break;
    case DayOfWeek.Friday:
        day = day.AddDays(19);
        break;
    case DayOfWeek.Saturday:
        day = day.AddDays(18);
        break;
}

// 仅对比日期部分
if (DateTime.Now.Date != day.Date)
{
    // 日期不匹配时的逻辑
}
else
{
    // 日期匹配时的逻辑
}

可选的字符串对比方案(不推荐)

如果一定要用字符串格式对比,需要将两边都转为同格式的字符串,且注意格式符要写小写yyyy(大写YYYY是ISO周年份,和日历年可能不一致,容易出bug):

if (DateTime.Now.ToString("dd-MM-yyyy") != day.ToString("dd-MM-yyyy"))

该方案性能不如直接用Date属性对比,非必要不建议使用。

内容的提问来源于stack exchange,提问作者Broski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:39:01