2012-12-06 40 views
8

Nếu tôi có var olddate = DateTime.Parse('05/13/2012');Đặt ngày giờ thành ngày đầu tiên của tháng tiếp theo?

và tôi muốn để có được var newdate = (the first of the month after olddate, 06/01/2012 in this case);

tôi sẽ mã gì? Tôi đã cố gắng thiết lập tháng + 1 nhưng tháng không có setter.

+0

ví dụ của bạn dường như không phù hợp . Bạn có thể giải thích nếu điều này được cho là vào ngày 6 tháng 1 năm 2013 sau ngày 5 tháng 12 năm 2012 không? – Oded

+0

@Oded xin lỗi, tôi đã định dạng kiểu ngày của Mỹ, dd/mm/yyyy – proseidon

+1

Thực hiện chỉnh sửa để ngày không rõ ràng đối với những người không phải là người Hoa Kỳ. – Oded

Trả lời

20

Hãy thử điều này:

olddate = olddate.AddMonths(1); 
DateTime newDate = new DateTime(olddate.Year, olddate.Month, 1, 
    0, 0, 0, olddate.Kind); 
+0

Chỉnh sửa Ninja ftw. Nhớ giữ '' '' '' của 'DateTime'. Rất nhiều người bỏ qua nó, nhưng nếu bạn bỏ qua nó và sau đó vượt qua 'DateTime' của bạn để mã mà không, một cái gì đó bất ngờ có thể xảy ra. –

7

này sẽ không bao giờ gây out-of-phạm vi lỗi, và sẽ giữ gìn DateTime 's Kind.

dt = dt.AddMonths(1.0); 
dt = new DateTime(dt.Year, dt.Month, 1, 0, 0, 0, dt.Kind); 
2

Bạn phải xác định tháng và năm đúng và sau khi đặt 1ª ngày. Hãy thử điều này:

// define the right month and year of next month. 
var tempDate = oldDate.AddMonths(1); 

// define the newDate with the nextmonth and set the day as the first day :) 
var newDate = new DateTime(tempDate.Year, tempDate.Month, 1); //create 
+0

đánh tôi đến 10 giây. Có một upvote – Kevin

0

rất nhiều ví dụ ... chọn posion của bạn;)

var olddate = DateTime.Parse("05/12/2012"); 

int currentDay = ((DateTime)olddate).Day; 
//can always replace the while loop and just put a 1 for current day 
while(currentDay != 1) 
    currentDay--; 

var newdate = (DateTime.Parse(olddate.AddMonths(1).Month.ToString() + "/" + currentDay.ToString() + "/" + olddate.AddMonths(1).Year.ToString())); 
0

Hãy thử điều này đơn giản một-liner:

var olddate = DateTime.Parse("05/13/2012"); 
var newdate = olddate.AddDays(-olddate.Day + 1).AddMonths(1); 
// newdate == DateTime.Parse("06/01/2012") 
Các vấn đề liên quan