比较C#中的DateTimes

时间:2011-02-23 21:19:38

标签: c# datetime

private void ValidateEffectiveDate()
{
    bool ICAdvanced = SessionManager.DisplayUser.IsInRole(PERMISSIONS.hasICAdvanced);
    if (!ICAdvanced && model.EffectiveDate < DateTime.Now)
    {
         this.CheckAndAddValidation("EffectiveDate",
            "You do not have the advanced permission, so you " + 
            "are unable to value historical indications.");
    }
}

如果您不是ICAdvanced,则您不应该拥有过去的日期,即今天或更早的日期。但是,您今天或将来都可以拥有。

为什么这段代码没有正确反映?

2 个答案:

答案 0 :(得分:9)

嗯,你现在从 ,而不是今天来做一件事。如果“now”是下午5点,但EffectiveDate是今天午夜,那么目前这将添加验证错误。

所以可能想要:

if (!ICAdvanced && model.EffectiveDate < DateTime.Today)

但是,您还需要弄清楚model.EffectiveDate的表示方式。 DateTime非常不幸处理时区,因为值可以是UTC,本地或未指定。我目前还不清楚它如何影响比较(如果我在UTC + 5的时区比较“当地午夜”和“UTC午夜”,结果应该是什么)?我认为它将它们都视为本地,因此将“本地午夜”与“UTC午夜”比较为相同。值得思考。

答案 1 :(得分:0)

我会说问题是你迫使它在当前时刻之后,而不是今天或之后。或许应该是这样的:

private void ValidateEffectiveDate()
{
    bool ICAdvanced = SessionManager.DisplayUser.IsInRole(PERMISSIONS.hasICAdvanced);
    if (!ICAdvanced && model.EffectiveDate < DateTime.Now.Date)
    {
        this.CheckAndAddValidation("EffectiveDate", "You do not have the advanced permission, so you are unable to value historical indications.");
    }
}