使用C# DateTime.SpecifyKind处理起止日期时持续报错,求解决
日期范围获取数据报错的排查与修复
常见问题及修复方案:
未处理可空日期的null情况
如果StartDate或EndDate是DateOnly?这类可空类型,直接调用.Value会在值为null时抛出InvalidOperationException。必须先做null校验:if (!StartDate.HasValue || !EndDate.HasValue) { throw new ArgumentNullException("起始日期和结束日期均不能为空"); } var startDateTime = DateTime.SpecifyKind(StartDate.Value.ToDateTime(TimeOnly.MinValue), DateTimeKind.Utc); var endDateTime = DateTime.SpecifyKind(EndDate.Value.ToDateTime(TimeOnly.MaxValue), DateTimeKind.Utc);时间范围不完整导致数据遗漏
你当前给结束日期设置TimeOnly.MinValue,会让结束日期仅包含当天0点整的时刻,当天其余时间的数据会被排除。如果要覆盖结束日期全天,应该改用TimeOnly.MaxValue:var endDateTime = DateTime.SpecifyKind(EndDate.Value.ToDateTime(TimeOnly.MaxValue), DateTimeKind.Utc);日期顺序错误引发逻辑异常
如果结束日期早于起始日期,后续的数据查询可能返回空结果或抛出逻辑错误,先做顺序校验:if (EndDate.Value < StartDate.Value) { throw new ArgumentException("结束日期不能早于起始日期"); }
内容的提问来源于stack exchange,提问作者Stephen OHAERI
相关产品推荐
相关产品推荐

