2015-12-17 4 views
2

Я пытаюсь использовать функцию DateTime в C# для вычисления последнего дня следующего месяца.Рассчитать последний день следующего месяца

Например, сегодня 17 декабря 2015 года. Я хочу, чтобы функция DateTime возвращалась 31 января 2016 года (последний день следующего месяца).

Я использую следующие для расчета в первый день следующего месяца (это работает):

DateTime firstDayNextMonth = DateTime.Today.AddDays(-DateTime.Now.Day+1).AddMonths(1); 
+0

Добавить месяцев (2) .addday (-1)? –

+5

Учитывая удивительное количество неправильных ответов, которые этот вопрос привлек менее чем за десять минут, вас, возможно, простят за эту метку клавиатуры на лбу. Игнорировать ответы; вы будете тратить больше времени, пытаясь выяснить, что с ними не так, как вам потребуется, чтобы получить правильный ответ. Вернитесь к первым принципам. У вас есть текущая дата. Можете ли вы определить, что месяц * и год * будет в следующем месяце? Сделай так. Если у вас есть эта информация, вы можете определить, сколько дней в этом месяце? Теперь у вас есть ответ на ваш вопрос: год, месяц и день. –

+0

Название говорит в последний день, переменная - первый день. Вы знаете, какую дату вы хотите? –

ответ

10
DateTime reference = DateTime.Now; 
DateTime firstDayThisMonth = new DateTime(reference.Year, reference.Month, 1); 
DateTime firstDayPlusTwoMonths = firstDayThisMonth.AddMonths(2); 
DateTime lastDayNextMonth = firstDayPlusTwoMonths.AddDays(-1); 
DateTime endOfLastDayNextMonth = firstDayPlusTwoMonths.AddTicks(-1); 

Демо: http://rextester.com/AKDI52378

+3

Этот ответ обладает приятным свойством, что многие другие ответы не были * другими *, чем правильность. ** Он вызывает только 'Now' один раз **. Помните: 'Now' возвращает разные значения каждый раз, когда вы его вызываете. «Now' можно вернуть результат в декабре 2015 года один раз и в январе 2016 года через наносекунду позже. Теперь, конечно, это означает, что вычисленный результат будет * неправильным *, потому что он устарел, но по крайней мере математика будет выполнена последовательно и правильно. И на самом деле нет никакого способа точно ответить на вопрос «через два месяца», когда вы наносекунды от месяца меняются. –

0

попробовать это:

int Day= DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month+1>12 ? 01 : DateTime.Now.Month+1); 
+0

Не работает в декабре, выбрасывает исключение –

+0

@BenVoigt теперь изменен –

0
var lastDayInNextMonth = DateTime.DaysInMonth(DateTime.Now.AddMonths(1).Year, DateTime.Now.AddMonths(1).Month); 

@ Бен: DateTime.Now.AddMonths(1) добавит 1 месяц на текущую дату не вычесть 11 месяцев.

enter image description here

DateTime.Now.AddMonths(1).Year даст 2016 не 2015 отсылаем прикрепленное изображение

+0

Не работает в декабре, идет назад 11 месяцев вместо форварда 1 –

+0

(ответ на редактирование) Действительно 'DateTime.Now.AddMonths (1) .Year' будет давать 2016. Но ваш ответ использует' DateTime.Now.Year' ... –

+0

@ Ben: Отличная точка зрения ..........! Абсолютно верно. –

0
DateTime.DaysInMonth(DateTime.Now.AddMonths(1).Year, DateTime.Now.AddMonths(1).Month); 
+0

Не работает в декабре (проще простить, если 'DateTime.Now' не было в декабре сегодня) –

+0

Я его модифицировал. Теперь он будет работать в течение любого месяца. @BenVoigt –

0
//system date or any date u want this case it is a calendar picker - 22/03/2016 
DateTime today = dtpFrom.Value; 

//Add a month to your date example , it now becomes - 22/04/2016 
DateTime endOfMonth = new DateTime(today.Year, today.Month,today.Day).AddMonths(1); 

//Get the last date off the above which is - 30 
int getlastday = DateTime.DaysInMonth(endOfMonth.Year, endOfMonth.Month); 

//Now set the date to the value which will be the last day off the next month - 30/04/2016 
DateTime newDate = new DateTime(endOfMonth.Year, endOfMonth.Month, getlastday); 
+0

Pls добавляет некоторое описание вместо ответов только на код. – danopz

+0

Привет, я добавил комментарии, надеюсь, что это поможет – wesley7

Смежные вопросы