2015-01-05 15 views
11

Kullanıcının mevcut yılın önceki ayını seçmesine izin verdiğim bir DateTimePicker var.Datetime'den bir ay çıkar. Bugün

Sorun şu ki, eğer tarih 1 Ocak ise, şu an yaptığım şekilde geçen yılın Aralık ayını hesaplayamaz.

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; 
} 

cevap

31

Sadece adding` -1' tarafından bir ay substract:

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

DateTime.AddMonths MSDN belgelerine bakın.

+0

: onun cevabını üzerine inşa edilecek ve (qs geçersiz bir tarih dizesi olabilir ihtimali varsa) hata işleme artırmak için, böyle bir şey yapabilir. Diyelim ki, önceki 1, 6 ve 9 aylık verileri almayı düşünen 3 filtre düğmem var, biraz çirkin görünüyor (sadece ben mi yoksa başkası aynı düşünüyor mu?) AddMonths yöntemi. ve ayrıca kodda sihirli numaralara sahip? teşekkür ederim –

3

Patrick anladı. Bunu yapmanın daha iyi bir yolu var mı

DateTime qsValue; 

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

dateTimePicker1.Value = (DateTime.TryParse(qs, out qsValue)) 
    ? qsValue 
    : dateTimePicker1.MaxDate; 
İlgili konular