2009-07-16 14 views

Odpowiedz

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

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

Doskonała! po prostu wykonałem test jednostkowy i pracuję zarówno w roku skoku, jak i bez skoku! –

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

Wiele opcji DateTime.Teraz połączeń może być kosztowne, ponieważ nowe wystąpienie struktury DateTime jest tworzone za każdym razem, gdy jest odwołanie. – opedog

+9

@opedog: Kosztowne to pojęcie względne. Ta * wolna * wersja może zarządzać około 1,7M iteracji/sekundę na moim komputerze, w porównaniu do około 2,7M iteracji/sekundę, jeśli raz wywołuję 'DateTime.Now' i ponownie używam instancji. Z pewnością przyzwoita poprawa, ale wątpię, czy zostałaby zauważona w większości sytuacji w świecie rzeczywistym. – LukeH

+0

To prawda, proszę pana. :) – opedog

2

Spróbuj DateTime.DaysInMonth(int year, int month) method

Oto przykład:

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

-1 ponieważ inne rozwiązania są o wiele bardziej genialne – tomfanning

+2

@tomfanning ... pardon? W jaki sposób WIĘCEJ pomysłowości NIE można używać funkcji, która ma dokładnie to, czego chcesz? – DevinB

+1

Więc jakość odpowiedzi można ocenić tylko w porównaniu do innych? –

Powiązane problemy