2015-01-05 6 views
11

Ich habe eine DateTimePicker in der ich dem Benutzer erlauben, Monat vor dem aktuellen Jahr auszuwählen.Subtrahieren Sie einen Monat von Datetime.Today

Das Problem ist, dass, wenn das Datum 1. Januar ist, es nicht den Dezember-Monat des letzten Jahres in der Art berechnen kann, wie ich es jetzt mache.

var today = DateTime.Today; 

var lastmonth = new DateTime(today.Year, today.Month - 1, 1); 
if (qs == "") 
{ 
    dateTimePicker1.MaxDate = lastmonth; 
    dateTimePicker1.Value = lastmonth; 
} 
else 
{ 
    DateTime dt = Convert.ToDateTime(qs); 

    dateTimePicker1.Value = dt; 
    dateTimePicker1.MaxDate = lastmonth; 
} 

Antwort

31

subtrahieren Nur einen Monat nach ‚adding` -1:

var lastmonth = DateTime.Today.AddMonths(-1); 

die MSDN-Dokumentation finden Sie auf DateTime.AddMonths.

+0

Gibt es einen besseren Weg, dies zu tun. Nehmen wir an, ich habe 3 Filterknöpfe, die Daten von den vorherigen 1, 6 und 9 Monaten erhalten sollen, es sieht ein bisschen hässlich aus (ist es nur ich oder jemand anderes denkt das gleiche?), um Bündel von Minuszahlen zu bekommen AddMonths-Methode. und auch magische Zahlen im Code? Vielen Dank –

3

Patrick hat es geschafft. Um auf seine Antwort zu bauen und verbessern Fehlerbehandlung (wenn es eine Möglichkeit, dass qs könnte ein ungültiges Datum String sein), könnte tun Sie so etwas wie:

DateTime qsValue; 

dateTimePicker1.MaxDate = DateTime.Today.AddMonths(-1); 

dateTimePicker1.Value = (DateTime.TryParse(qs, out qsValue)) 
    ? qsValue 
    : dateTimePicker1.MaxDate; 
Verwandte Themen