How to find the first day of next month,if the current month is december
I'm using the fol开发者_运维技巧lowing query to get the next month.
int theMonth = ((System.DateTime)periodStartDate).Month+1;
But if the periodstartDate month id=s december,the above statement throws error.
I think you can get it in this fashion
DateTime dt = new DateTime(2011,12,2);
DateTime dayone = new DateTime(dt.AddMonths(1).Year, dt.AddMonths(1).Month, 1);
Now you have a proper DateTime
object to the first of the next month, do as you please with it
The expression ((System.DateTime)periodStartDate).Month+1
doesn't throw an error if the month is December - it just returns 13. I suspect you're doing this:
var nextMonth = new DateTime(periodStartDate.Year, periodStartDate.Month + 1, 1);
That would throw an error.
Try this instead:
var nextMonth = new DateTime(periodStartDate.Year, periodStartDate.Month, 1)
.AddMonths(1);
I like V4V's answer, but I write it this way:
DateTime dt = new DateTime(2011,12,2);
DateTime firstDayNextMonth = dt.AddMonths(1).AddDays(-dt.Day+1);
For example, I might be computing a future time and this code does that without stripping out the time part.
Per hvd's most astute comment, this code should be:
DateTime dt = new DateTime(2011,12,2);
DateTime firstDayNextMonth = dt.AddDays(-dt.Day+1).AddMonths(1);
int theMonth = ((System.DateTime)periodStartDate).AddMonths(1).Month;
The trick part is to understand the start date could not start in the first day of the current month, so a plain AddMonth
could lead to undesired dates. Build a new DateTime in the day 01 and, then, add the month.
var firstDayNextMonth = new DateTime(startDate.Year, startDate.Month, 1).AddMonths(+1);
BTW, the AddMonths
method documentation states:
The AddMonths method calculates the resulting month and year, taking into account leap years and the number of days in a month, then adjusts the day part of the resulting DateTime object. If the resulting day is not a valid day in the resulting month, the last valid day of the resulting month is used. For example, March 31st + 1 month = April 30th, and March 31st - 1 month = February 28 for a non-leap year and February 29 for a leap year.
First date of next month, time 00:00:00
DateTime dt = DateTime.Now.AddMonths(1);
DateTime dayone = new DateTime(dt.Year, dt.Month, 1);
after you compute theMonth
, check whether it equals to 13 (the month after December) and replace the value with 1:
theMonth = theMonth==13 ? 1 : theMonth;
If you call AddMonths(1)
then .NET will automatically roll the date into the next year.
periodStartDate.AddMonths(1).Month;
You can use this code:
var newDaye = DateTime.Now.AddMonths(1).AddDays(-DateTime.Now.Day + 1); //first day in next month
DateTime now = DateTime.Now;
DateTime nextMonth;
if(now.Day > 1)
nextMonth = now.AddDays(-(now.Day - 1)).AddMonths(1);
else
nextMonth = now.AddMonths(1);
Where Now is the Date you want to start ,you could replace with TheStartPeriod
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
DateTime nextMonthStartDate= DateTime.Parse(startdate.Year + "-" + startdate.AddMonths(1).Month + "-01");
This will work in leap year or non leap year. In the above converting strings to date time with static date 1 coz always taking start of the month. Hope it is useful
精彩评论