2010-02-03 29 views
24

Làm cách nào để trừ một tháng khỏi đối tượng ngày trong VB.NET?Làm cách nào để trừ một tháng khỏi đối tượng Ngày?

Tôi đã thử:

Today.AddMonths(-1) 

Tuy nhiên, cho rằng Hôm nay là 01-Jan-2010, kết quả tôi nhận được là 01-Dec-2010. Câu trả lời tôi muốn là ngày 01 tháng 12 năm 2009.

Có cách nào thuận tiện để thực hiện việc này trong khuôn khổ .NET không?

+1

OK. Câu hỏi này (và câu trả lời) thực sự, thực sự gây nhầm lẫn cho tôi. Mã chính xác bạn đang sử dụng thể hiện vấn đề trên là gì? Tôi đã gõ Today.AddMonths (-1) vào trình gỡ lỗi và nó hoạt động đúng cách, trừ một từ năm nếu bạn vào tháng Giêng. –

+2

Xin chào Jason. Vấn đề không thực sự là .AddMonths() không hoạt động. Vấn đề là các đối tượng Date không thay đổi được. Tôi đã không gán giá trị trả về của .AddMonths() cho một biến. Ví dụ, tôi đã làm someDate.AddMonths (-1), khi nó phải là someDate = someDate.AddMonths (-1). – Andrew

+1

Trong trường hợp đó, mặc dù, someDate sẽ không thay đổi. tức là trong ví dụ của bạn, nó sẽ vẫn được đặt thành ngày 01 tháng 1 năm 2010, không phải từ ngày 1 tháng 12 năm 2010. Do đó, sự nhầm lẫn của tôi. –

Trả lời

41

Bạn thực sự phải vận chuyển Hôm nay thành một biến và cho phép bài tập đó hoạt động ở đó. Đoạn mã sau sẽ tạo ra kết quả bạn mong đợi (Tôi vừa xác minh nó vì bài viết của bạn làm tôi nghĩ hai lần).

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

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

* thở dài * không thể tin rằng tôi đã giảm cho điều đó một lần nữa ... – Andrew

8

Điều này làm việc tốt, bạn cần phải nhớ rằng DateTime là imutable.

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

Có một cái nhìn tại DateTime Structure

Một tính toán trên một thể hiện của DateTime, chẳng hạn như cộng hoặc trừ, không thay đổi giá trị của dụ. Thay vào đó, phép tính trả về một phiên bản mới của DateTime có giá trị là kết quả của phép tính .

+1

Cảm ơn. Tất cả -2 doanh nghiệp đều khó hiểu. – dbasnett

0

Tôi đã sử dụng thông tin sau và hoạt động.

Dim dtToday As DateTime = Date.Today 
dtToday = dtToday.AddMonths(-2) 
1
Dim d As DateTime = #1/1/2010# 
d = d.AddMonths(-1) 
Các vấn đề liên quan