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
相关产品推荐
相关产品推荐

