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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:35:04