2009-07-16 2 views

ответ

43
var now = DateTime.Now;  
var firstDayCurrentMonth = new DateTime(now.Year, now.Month, 1); 

var lastDayLastMonth = firstDayCurrentMonth.AddDays(-1); 
+2

Отлично! просто сделал единичный тест для этого и работает как для прыжка, так и для несезонного года! –

13
DateTime now = DateTime.Now; 
DateTime lastDayOfLastMonth = now.Date.AddDays(-now.Day); 
+0

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

+9

@opedog: Дорогостоящий - относительный термин. Эта версия * slow * может обрабатывать около 1,7 млн. Итераций в секунду на моей машине по сравнению с 2,7 М итерациями в секунду, если я однажды вызову «DateTime.Now» и повторю использование экземпляра. Конечно, достойное улучшение, но я сомневаюсь, что это будет замечено в большинстве реальных ситуаций. – LukeH

+0

Это правда, сэр. :) – opedog

2

Попробуйте DateTime.DaysInMonth(int year, int month) method

Вот пример:

DateTime oneMonthAgo = DateTime.Now.AddMonths(-1); 
int days = DateTime.DaysInMonth(oneMonthAgo.Year, oneMonthAgo.Month); 
+1

-1 потому что другие решения настолько более изобретательны – tomfanning

+2

@tomfanning ... pardon? Как БОЛЬШЕ изобретательно НЕ использовать функцию, предназначенную для того, чтобы делать именно то, что вы хотите? – DevinB

+1

Таким образом, качество ответа может оцениваться только по сравнению с другими? –

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