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,则您不应该拥有过去的日期,即今天或更早的日期。但是,您今天或将来都可以拥有。
为什么这段代码没有正确反映?
答案 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.");
}
}