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

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

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

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

Ответы [ 9 ]

41 голосов
/ 23 августа 2011

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

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

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

17 голосов
/ 23 августа 2011

Выражение ((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);
11 голосов
/ 10 мая 2013

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

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

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

В наиболее проницательном комментарии hvd этот код должен быть:

DateTime dt = new DateTime(2011,12,2);
DateTime firstDayNextMonth = dt.AddDays(-dt.Day+1).AddMonths(1);
7 голосов
/ 23 августа 2011
int theMonth = ((System.DateTime)periodStartDate).AddMonths(1).Month;
2 голосов
/ 03 апреля 2018

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

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

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

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

1 голос
/ 23 августа 2011

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

periodStartDate.AddMonths(1).Month;
1 голос
/ 23 августа 2011

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

theMonth = theMonth==13 ? 1 : theMonth;
0 голосов
/ 28 июня 2015
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 голосов
/ 23 августа 2011
   DateTime now = DateTime.Now;
        DateTime nextMonth;
        if(now.Day > 1)
         nextMonth = now.AddDays(-(now.Day - 1)).AddMonths(1);
        else
         nextMonth = now.AddMonths(1);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...