2009-07-16 7 views

Répondre

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

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

Excellent! vient de faire un test unitaire pour cela et fonctionne à la fois pour l'année bissextile et non bissextile! –

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

Plusieurs appels DateTime.Now peuvent être coûteux, car une nouvelle instance de la structure DateTime est créée chaque fois qu'elle est référencée. – opedog

+9

@opedog: Costly est un terme relatif. Cette version * lente * peut gérer environ 1,7 million d'itérations/seconde sur ma machine, comparé à environ 2,7 millions d'itérations/seconde si j'appelle 'DateTime.Now' une fois et réutilise l'instance. Certainement une amélioration décente, mais je doute que cela soit remarqué dans la plupart des situations du monde réel. – LukeH

+0

C'est vrai, monsieur. :) – opedog

2

Essayez le DateTime.DaysInMonth(int year, int month) method

Voici un exemple:

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

-1 parce que les autres solutions sont tellement plus ingénieuses – tomfanning

+2

@tomfanning ... pardon? Comment est-il PLUS ingénieux de ne PAS utiliser la fonction qui est censée faire exactement ce que vous voulez? – DevinB

+1

Donc, la qualité d'une réponse ne peut être évaluée que par rapport aux autres? –

Questions connexes