2015-01-05 2 views
11

나는 DateTimePicker을 사용하여 사용자가 현재 연도 이전 달을 선택할 수 있도록했습니다.Datetime에서 오늘 한 달을 뺍니다. 오늘

문제는, 만약 날짜가 1 월 1 일이라면, 내가 지금하고있는 것과 같은 방식으로 작년의 12 월 달을 계산할 수 없다는 것입니다.

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

답변

31

그냥 adding` -1 '로 한 달 빼지 :

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

DateTime.AddMonths에 대한 MSDN 설명서를 참조하십시오.

+0

: 그의 대답에 구축하고 (qs 잘못된 날짜 문자열이 될 수있는 가능성이 있는지) 오류 처리를 개선하기 위해, 당신은 뭔가를 할 수 있습니다. 내가 전에 1, 6, 9 개월 동안 데이터를 가져 오는 것으로 가정하는 3 개의 필터 버튼이 있다고 가정 해 봅시다. 약간 추한 것처럼 보입니다 (단지 나 또는 다른 사람이 같은 생각입니까?). AddMonths 메서드입니다. 또한 코드에 매직 넘버가 있습니까? 고맙습니다 –

3

패트릭이 얻었습니다. 이 일을 더 나은 방법이 있나요

DateTime qsValue; 

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

dateTimePicker1.Value = (DateTime.TryParse(qs, out qsValue)) 
    ? qsValue 
    : dateTimePicker1.MaxDate; 
관련 문제