2010-02-03 121 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)