比较C#中的DateTimes

sla*_*dau 0 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.");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您不是ICAdvanced,则您应该无法拥有过去的日期,即今天或之前的某一天.但是,您今天或将来都可以拥有.

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

Jon*_*eet 9

好吧,你从现在开始,而不是今天一件事.如果"now"是下午5点,但EffectiveDate是今天的午夜,那么目前这将添加验证错误.

所以你可能想要:

if (!ICAdvanced && model.EffectiveDate < DateTime.Today)
Run Code Online (Sandbox Code Playgroud)

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