C#中忽略时间比较日期及函数返回结果异常修复方法
问题修复方案
问题原因
函数返回不符合预期的核心问题:
DateTime.Now包含当前具体时间(时/分/秒),而DateTime.ParseExact解析出的FeesType1是06-10-2023 00:00:00(当天零点)。只要当前时间不是0点整,TodayDate就会大于FeesType1,从而进入第二个分支返回2,而非预期的1。- 最后一个分支的
TodayDate <= FeesType4 || TodayDate > FeesType4逻辑冗余,该表达式永远为true,完全可以简化为else。
修复后的代码
using System.Globalization; int value = GetFeesType(); Console.WriteLine("FeesType = {0}", value); int GetFeesType() { int FeesType = 1; // 使用DateTime.Today获取当前日期的00:00:00,仅比较日期部分 DateTime TodayDate = DateTime.Today; DateTime FeesType1 = DateTime.ParseExact("06-10-2023", "dd-MM-yyyy", null); DateTime FeesType2 = DateTime.ParseExact("27-10-2023", "dd-MM-yyyy", null); DateTime FeesType3 = DateTime.ParseExact("16-11-2023", "dd-MM-yyyy", null); DateTime FeesType4 = DateTime.ParseExact("01-12-2023", "dd-MM-yyyy", null); if (TodayDate <= FeesType1) { FeesType = 1; } else if (TodayDate <= FeesType2) { FeesType = 2; } else if (TodayDate <= FeesType3) { FeesType = 3; } else { FeesType = 4; } return FeesType; }
额外优化建议
如果使用.NET 6及以上版本,推荐用DateOnly类型专门处理日期,彻底避免时间部分的干扰:
int GetFeesType() { int FeesType = 1; DateOnly TodayDate = DateOnly.FromDateTime(DateTime.Now); DateOnly FeesType1 = DateOnly.ParseExact("06-10-2023", "dd-MM-yyyy", null); DateOnly FeesType2 = DateOnly.ParseExact("27-10-2023", "dd-MM-yyyy", null); DateOnly FeesType3 = DateOnly.ParseExact("16-11-2023", "dd-MM-yyyy", null); DateOnly FeesType4 = DateOnly.ParseExact("01-12-2023", "dd-MM-yyyy", null); if (TodayDate <= FeesType1) { FeesType = 1; } else if (TodayDate <= FeesType2) { FeesType = 2; } else if (TodayDate <= FeesType3) { FeesType = 3; } else { FeesType = 4; } return FeesType; }
内容的提问来源于stack exchange,提问作者saeed ahmed
相关产品推荐
相关产品推荐

