Подтвердить что ты не робот

Как найти первый день следующего месяца, если текущий месяц декабрь

Я использую следующий запрос, чтобы получить следующий месяц.

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

Но если periodstartDate month id = s декабрь, вышеприведенное утверждение выдает ошибку.

4b9b3361

Ответ 1

Я думаю, вы можете получить его таким образом

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

Теперь у вас есть правильный DateTime объект к первому из следующего месяца, сделайте, пожалуйста, с ним

Ответ 2

Выражение ((System.DateTime)periodStartDate).Month+1 не выдает ошибку, если месяц декабрь - он просто возвращает 13. Я подозреваю, что вы это делаете:

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

Это приведет к ошибке.

Попробуйте это вместо:

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

Ответ 3

Мне нравится V4V-ответ, но я пишу его так:

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

Например, я мог бы вычислять будущее время, и этот код делает это без удаления временной части.

Самый дорогой комментарий, на первый взгляд, этот код должен быть:

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

Ответ 4

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

Ответ 5

Хитрость заключается в том, чтобы понять, что начальная дата не может начинаться в первый день текущего месяца, поэтому простой AddMonth может привести к нежелательным датам. Создайте новый DateTime в день 01, а затем добавьте месяц.

var firstDayNextMonth = new DateTime(startDate.Year, startDate.Month, 1).AddMonths(+1);

Кстати, документация по методу AddMonths гласит:

Метод AddMonths вычисляет итоговый месяц и год с учетом високосных годов и количества дней в месяце, а затем корректирует дневную часть результирующего объекта DateTime. Если результирующий день не является действительным днем в результирующем месяце, используется последний действительный день результирующего месяца. Например, 31 марта + 1 месяц = 30 апреля, а 31 марта - 1 месяц = 28 февраля для не високосного года и 29 февраля для високосного года.

Ответ 6

после вычисления theMonth, проверьте, равно ли оно 13 (месяц после декабря) и замените значение на 1:

theMonth = theMonth==13 ? 1 : theMonth;

Ответ 7

Если вы вызываете AddMonths(1), тогда .NET автоматически переведет дату в следующий год.

periodStartDate.AddMonths(1).Month;

Ответ 8

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

Где сейчас находится дата, которую вы хотите запустить, вы можете заменить на TheStartPeriod

Ответ 9

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

Ответ 10

    DateTime nextMonthStartDate= DateTime.Parse(startdate.Year + "-" + startdate.AddMonths(1).Month + "-01");

Это будет работать в високосный или не високосный год. В приведенном выше преобразовании строки в дату и время со статической датой 1 coz всегда принимают начало месяца. Надеюсь, это полезно