2011-03-19 57 views
11

我有一個DateTime對象,我想檢查它是否在最近24小時內。C#DateTime在最近24小時內

我做了這樣的事情,但它的錯誤:

myDateTime > DateTime.Now.AddHours(-24) && myDateTime < DateTime.Now 

沒我有什麼錯?

+1

定義 「這是不對的」 ......乍一看,它看起來OK ......試過AddDays(-1)? – 2011-03-19 22:27:43

回答

23

您發佈的代碼沒有問題,所以無論您做錯了什麼,都是代碼中的其他地方。

我只看到在代碼中兩個小瑕疵,但他們隻影響個別案例:

應該避免在代碼中反覆得到DateTime.Now財產。它的值會發生變化,所以在某些情況下,當值從一個用戶變爲另一個用戶時,可能會得到不一致的結果。

要獲得時間間隔,您通常會配對一個包含和一個排他運算符,如><=>=<。這樣,您可以檢查彼此相鄰的時間間隔,例如0 - 24小時和24 - 28小時,而不會出現間隙或重疊。

DateTime now = DateTime.Now; 
if (myDateTime > now.AddHours(-24) && myDateTime <= now) 
+0

我不理解你所談論的優化技術,你能解釋一些代碼嗎? – 2011-03-19 22:43:44

+1

@Gully Monsta:我在上面添加了一個例子。但是,這不是任何優化,它只是避免代碼中可能存在的不一致。 – Guffa 2011-03-19 22:47:54

+0

另一個小問題是它應該使用'UTCNow'。我認爲'Now'在從DST切換到DST時顯示出一些奇怪的行爲。不確定這是否會影響此代碼。 – CodesInChaos 2011-03-19 23:27:03

10
  1. 只能在函數中得到DateTime.Now一次 - 否則這個數值可能會改變。使用<=而不是<。如果您在設定時間後檢查微秒,則它仍將等於DateTime.Now。我實際上在生產代碼中遇到了這種情況,其中導入不會顯示在檢查<的另一個查詢中,因爲導入過快!

使用此代碼:

DateTime now = DateTime.Now; 
DateTime yesterday = now.AddDays(-1); 
if (myDateTime > yesterday && myDateTime <= now) { 
    ... 
} 
+0

對不起,我不能投票,因爲我太低。 – 2011-03-19 23:27:47

相關問題