使用Ticks计算DateTime遇报错,如何判断日期是否超过一年?
问题解决:判断可空DateTime是否早于一年前
你的代码报错是因为new DateTime(1,0,0)是非法的——DateTime构造器的月份参数必须是1-12,传入0会触发“无法表示的DateTime”错误。
要实现“判断FinishDate已填写且日期早于一年前”的需求,有两种更稳妥的方式:
方式一:直接比较日期(推荐)
利用DateTime的AddYears方法计算一年前的日期,直接和FinishDate比较,逻辑清晰且自动处理闰年等特殊情况:
// 先判断FinishDate是否已填写(非空) if (to.FinishDate.HasValue) { DateTime oneYearAgo = DateTime.Now.AddYears(-1); if (to.FinishDate.Value < oneYearAgo) { // 此处写FinishDate早于一年前的处理逻辑 } }
方式二:用TimeSpan计算时间差
如果一定要通过Ticks差值判断,先通过合法方式获取一年对应的时间间隔,再比较Ticks:
if (to.FinishDate.HasValue) { // 获取准确的一年时间间隔(自动处理闰年) TimeSpan oneYearInterval = DateTime.Now - DateTime.Now.AddYears(-1); if (DateTime.Now.Ticks - to.FinishDate.Value.Ticks > oneYearInterval.Ticks) { // 此处写处理逻辑 } }
另外,你原本代码里把null的FinishDate设为DateTime.Now,这会导致null的情况被判定为“不早于一年前”,如果这不是你想要的逻辑,可以根据需求调整判断条件。
内容的提问来源于stack exchange,提问作者Dominique
相关产品推荐
相关产品推荐

