2010-02-03 75 views
24

如何從VB.NET中的日期對象中減去一個月?如何從Date對象中減去一個月份?

我曾嘗試:

Today.AddMonths(-1) 

不過,由於今天是01-JAN-2010,結果我得到的是01日 - 12月2010。我想要的答案是2009年12月1日。

有沒有一種方便的方法,在.NET框架內做到這一點?

+1

好的。這個問題(和答案)真的讓我很困惑。您使用的確切代碼是什麼,表現出上述問題?我在調試器中輸入了Today.AddMonths(-1),它正常工作,如果你是在一月份,則從一年中減去一個。 – 2010-02-03 19:34:48

+2

嗨,Jason。問題實際上並不是.AddMonths()不起作用。問題是Date對象是不可變的。我沒有將.AddMonths()的返回值賦給一個變量。例如,我在做someDate.AddMonths(-1),當它應該是someDate = someDate.AddMonths(-1)。 – Andrew 2010-02-03 21:53:08

+1

在這種情況下,someDate不會改變。即在您的示例中,它仍將設置爲2010年1月1日,而不是2010年12月1日。因此,我的困惑。 – 2010-02-04 00:12:47

回答

41

您實際上必須將Today傳輸到一個變量中,並讓該作業在那裏工作。下面的代碼會產生你期望的結果(我剛剛對它進行了驗證,因爲你的帖子讓我思考了兩次)。

Dim dt As DateTime = Date.Today 
dt = dt.AddMonths(-2) 

Dim x As String = dt.ToString() 
+2

*嘆了口氣*不敢相信我再次跌倒那個... – Andrew 2010-02-03 04:43:23

8

這很好,你需要記住DateTime是不可變的。

Dim d As DateTime 
d = New DateTime(2010, 1, 1) 
d = d.AddMonths(-1) 

看一看DateTime Structure

的計算上 的DateTime的實例,如加或減, 不修改 實例的值。相反,計算 會返回一個新的DateTime的實例 ,它的值是 計算的結果。

+1

謝謝。所有這些-2業務都令人困惑。 – dbasnett 2010-02-03 14:42:43

0

我已經使用了以下,它的工作原理。

Dim dtToday As DateTime = Date.Today 
dtToday = dtToday.AddMonths(-2) 
1
Dim d As DateTime = #1/1/2010# 
d = d.AddMonths(-1)