2013-05-21 64 views
-4

我想檢查選定日期是否在C#中是2年(24個月)。出於某種原因,我得到了這裏的邏輯,大腦超負荷。這是我的代碼。我如何檢查它是否2歲?檢查年差

if (dt.AddMonths(-24) < System.DateTime) 
{ 
    return true; 
} 
else 
{ 
    return false; 
} 

回答

7

你快到了。假設dt是要檢查的日期超過2歲,這樣做:

if(dt < System.DateTime.Today.AddMonths(-24)) 
{ 
    ... 
} 

運行這段代碼今日(21/05/2013),那麼當dt20/05/2011或更早的語句將返回true。如果你想包括21/05/2011然後用<=代替

注:還有一個AddYears方法

0

應該是:

return dt.AddYears(2) < System.DateTime.Now; 
+0

我認爲必須將幾個月添加到DateTime.Now而不是日期本身 –

+0

Withouth the minus you mean ... – Mr47

+0

@ vc74它可以是任何一種方式,但如果添加到日期,它需要是+24不是-24。 – Servy

3

相反的AddMonths(),您可以使用AddYears()這是更容易理解你的案件;

if(dt < DateTime.Now.AddYears(-2)) 
{ 
    return true; 
} 
else 
{ 
    return false; 
} 

返回一個新的DateTime是增加的年的指定數量的這種情況下

+0

「AddYears」的另一個好處,更重要的是可讀性,它考慮了閏年。 –

+0

@MichaelPerrenoud:AddMonths不考慮閏年?當然,它只是增加/減去月份值,甚至不考慮日期? – musefan

+1

@musefan,我認爲你是對的。我再次閱讀'AddMonths'的文檔,並說明它。 –

6
return dt < DateTime.Now.AddYears(-2) 
+0

'Today'比'Now'更好,但是指出if/else不必要的公平性(儘管我懷疑OP代碼可能只是爲了舉例...好吧,我希望它是無論如何) – musefan

+0

+ 1的清潔 – BaBu

+1

@musefan:你爲什麼說今天比現在更好? '今天'消除了時間部分,但不認爲這是一個優勢。 –

1

你明白了向後的 值;你正在檢查日期是否爲未來2年。

您要麼從DateTime.Now減去24個月(或2年),要麼將012個月(或2年)加到dt

這兩個會做你想要什麼:

if (dt.AddMonths(24) < DateTime.Now) //or dt.AddYears(2) 

if (dt < DateTime.Now.AddMonths(-24)) //or DateTime.Now.AddYears(-2) 

如果所有你真的做的是返回真或假,有沒有必要爲是否。只需return比較的結果。