2011-08-23 70 views
16

Tôi đang sử dụng truy vấn sau để nhận tháng tiếp theo.Cách tìm ngày đầu tiên của tháng tiếp theo, nếu tháng hiện tại là tháng

int theMonth = ((System.DateTime)periodStartDate).Month+1; 

Nhưng nếu periodstartDate tháng id = s december, câu lệnh trên sẽ phát sinh lỗi.

Có ai biết giải pháp không?

+3

không thực sự dòng này ném ra một lỗi? – Fender

+0

Ngoại lệ là gì? –

+0

Theo dõi ngăn xếp vui lòng? – Coops

Trả lời

1

sau khi bạn tính toán theMonth, kiểm tra xem nó tương đương với 13 (tháng sau ngày) và thay thế các giá trị với 1:

theMonth = theMonth==13 ? 1 : theMonth; 
5
int theMonth = ((System.DateTime)periodStartDate).AddMonths(1).Month; 
+0

Đây là câu trả lời đúng nếu bạn muốn nhận được tháng tiếp theo. Có lẽ đó là những gì anh ta đang tìm kiếm. –

1

Nếu bạn gọi AddMonths(1) sau đó .NET sẽ tự động cuộn ngày vào năm sau.

periodStartDate.AddMonths(1).Month; 
14

Khái niệm ((System.DateTime)periodStartDate).Month+1 không ném ra một lỗi nếu tháng đó là tháng mười hai - nó chỉ trả về 13. Tôi cho rằng bạn đang làm điều này:

var nextMonth = new DateTime(periodStartDate.Year, periodStartDate.Month + 1, 1); 

Điều đó sẽ ném ra một lỗi.

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

var nextMonth = new DateTime(periodStartDate.Year, periodStartDate.Month, 1) 
    .AddMonths(1); 
35

Tôi nghĩ rằng bạn có thể nhận được nó theo cách này

DateTime dt = new DateTime(2011,12,2); 
DateTime dayone = new DateTime(dt.AddMonths(1).Year, dt.AddMonths(1).Month, 1); 

Bây giờ bạn có một đối tượng thích hợp DateTime để là người đầu tiên của tháng tiếp theo, làm theo ý mình với nó

0
DateTime now = DateTime.Now; 
     DateTime nextMonth; 
     if(now.Day > 1) 
     nextMonth = now.AddDays(-(now.Day - 1)).AddMonths(1); 
     else 
     nextMonth = now.AddMonths(1); 

Bây giờ là ngày bạn muốn bắt đầu, bạn có thể thay thế bằng TheStartPeriod

11

Tôi thích câu trả lời V4V, nhưng tôi viết nó theo cách này:

DateTime dt = new DateTime(2011,12,2); 
DateTime firstDayNextMonth = dt.AddMonths(1).AddDays(-dt.Day+1); 

Ví dụ, tôi có thể được tính toán trong một thời gian tương lai và mã này không rằng nếu không có tước ra bán thời gian.

mỗi của HVD bình luận sắc sảo nhất, mã này sẽ là:

DateTime dt = new DateTime(2011,12,2); 
DateTime firstDayNextMonth = dt.AddDays(-dt.Day+1).AddMonths(1); 
+3

Bạn đang giả sử 'dt.AddMonths (1) .Day' giống như' dt.Day'. Xem xét điều gì xảy ra khi bạn đang ở trên ví dụ: 31 tháng 1. – hvd

+0

Quan sát tuyệt vời. Tôi đã sửa đổi bằng câu trả lời. –

+0

@hvd - Ví dụ đầu tiên chính xác là cách tôi đã viết nó. Đã cho tôi một giờ để tìm ra những gì đang diễn ra. Trong trường hợp của tôi những gì đã xảy ra những gì trong bộ nhớ ngoại lệ như lịch trả lại tháng một trong một vòng lặp vô hạn -.- –

0
DateTime date = DateTime.Now; 
Console.WriteLine(date); 
// Sunday 28.06.2015 г. 10:22:41 ч. 

int monthsBack = -1; 
int whichDay = 1; 
// It means -> what day the first day of the previous month is. 
DayOfWeek FirstDayOfWeek = date.AddMonths(monthsBack).AddDays(whichDay).DayOfWeek; 
Console.WriteLine(FirstDayOfWeek); 
// Friday 

int delta = DayOfWeek.Monday - date.AddMonths(monthsBack).AddDays(whichDay).DayOfWeek; 
Console.WriteLine(delta); 
// -4 
//-4 ->Monday , -3 ->Tuesday, -2 ->Wednesday , -1 ->Thursday, 0 ->Friday 
+0

Bạn nên giải thích mã của mình. –

Các vấn đề liên quan