我有一個DateTime
對象,我想檢查它是否在最近24小時內。C#DateTime在最近24小時內
我做了這樣的事情,但它的錯誤:
myDateTime > DateTime.Now.AddHours(-24) && myDateTime < DateTime.Now
沒我有什麼錯?
我有一個DateTime
對象,我想檢查它是否在最近24小時內。C#DateTime在最近24小時內
我做了這樣的事情,但它的錯誤:
myDateTime > DateTime.Now.AddHours(-24) && myDateTime < DateTime.Now
沒我有什麼錯?
您發佈的代碼沒有問題,所以無論您做錯了什麼,都是代碼中的其他地方。
我只看到在代碼中兩個小瑕疵,但他們隻影響個別案例:
應該避免在代碼中反覆得到DateTime.Now
財產。它的值會發生變化,所以在某些情況下,當值從一個用戶變爲另一個用戶時,可能會得到不一致的結果。
要獲得時間間隔,您通常會配對一個包含和一個排他運算符,如>
和<=
或>=
和<
。這樣,您可以檢查彼此相鄰的時間間隔,例如0 - 24小時和24 - 28小時,而不會出現間隙或重疊。
DateTime now = DateTime.Now;
if (myDateTime > now.AddHours(-24) && myDateTime <= now)
我不理解你所談論的優化技術,你能解釋一些代碼嗎? – 2011-03-19 22:43:44
@Gully Monsta:我在上面添加了一個例子。但是,這不是任何優化,它只是避免代碼中可能存在的不一致。 – Guffa 2011-03-19 22:47:54
另一個小問題是它應該使用'UTCNow'。我認爲'Now'在從DST切換到DST時顯示出一些奇怪的行爲。不確定這是否會影響此代碼。 – CodesInChaos 2011-03-19 23:27:03
DateTime.Now
一次 - 否則這個數值可能會改變。使用<=
而不是<
。如果您在設定時間後檢查微秒,則它仍將等於DateTime.Now
。我實際上在生產代碼中遇到了這種情況,其中導入不會顯示在檢查<
的另一個查詢中,因爲導入過快!使用此代碼:
DateTime now = DateTime.Now;
DateTime yesterday = now.AddDays(-1);
if (myDateTime > yesterday && myDateTime <= now) {
...
}
對不起,我不能投票,因爲我太低。 – 2011-03-19 23:27:47
定義 「這是不對的」 ......乍一看,它看起來OK ......試過AddDays(-1)? – 2011-03-19 22:27:43