我有一个DateTime
对象,我想查看它是否属于过去24小时内。
我做了类似这样的事情,但错了:
myDateTime > DateTime.Now.AddHours(-24) && myDateTime < DateTime.Now
我哪里出错?
答案 0 :(得分:33)
您发布的代码没有任何问题,因此无论您做错了什么都在代码的其他地方。
我只在代码中看到两个小缺陷,但它们只影响极端情况:
您应该避免在代码中重复获取DateTime.Now
属性。它的值会发生变化,因此在某些情况下,当值从一次使用变为下一次使用时,您可能会得到不一致的结果。
要获得时间间隔,您通常会将一个包含和一个独占运算符配对,例如>
和<=
,或>=
和<
。这样你可以检查彼此相邻的间隔,例如0到24小时和24到28小时,没有间隙或重叠。
DateTime now = DateTime.Now;
if (myDateTime > now.AddHours(-24) && myDateTime <= now)
答案 1 :(得分:12)
DateTime.Now
一次 - 否则值可能会发生变化。<=
,而不是<
。如果在设置时间后检查一微秒,它仍然等于DateTime.Now
。我实际上在生产代码中遇到了这种情况,导入不会出现在检查<
的其他查询中,因为导入太快了!使用此代码:
DateTime now = DateTime.Now;
DateTime yesterday = now.AddDays(-1);
if (myDateTime > yesterday && myDateTime <= now) {
...
}