2009-04-20 2 views
0

요구 사항 : receiveDate 및 DUEDATE :두 DateTimes 사이의 월 수를 계산하는 방법은 무엇입니까?

  • 두 날짜 사이의 개월 의 수를 계산합니다.

    • DUEDATE 항상 달의 마지막 날이 될 것입니다 :
    • 낙관과 비관 모두 계산은

    가정을 필요하다.

이미 전체 개월로 단 하루 연체 횟수를 의미하는 비관적 계산 (파악했습니다.

if(receiveDate > dueDate) 
    receiveDate.Month - dueDate.Month + (receiveDate.Year - dueDate.Year) * 12; 

인터넷이를 확인하기 위해 몇 가지 유사한 예를 설정에서 검색을 수행을

지금 내 본능은 낙관적 계산 그냥 같은 마이너스 일개월 될 것입니다 말해하지만 어떤 이유로 그냥 느낌이 좋지 않습니다. 바른 길에 나는 오전 또는 내가 뭔가를 놓친 거지?

+1

'낙관적 인/비관적 인'것을 이해하지 못합니다. 두 날짜 사이의 개월 수는 '두 날짜 사이에 하나 이상의 날짜가있는 달 수'로 정의됩니까? 어떤 경우에는 단 하나의 정답이 없을 것입니다. – mackenir

+0

정말 어떻게 부분 개월을 볼 수 있습니다. 하나의 경우에는 부분 달이 무시되고 다른 달은 전체 달과 같이 계산됩니다. –

답변

1

네 말이 맞아. 의 숫자를 찾으려면 두 날짜 사이에 개의 달을 빼고 1을 뺍니다 (receiveDate은 월의 마지막 날에 해당하지 않는다고 가정 할 경우 0 일의 나머지 기간이 어느 때든 유지됩니다) 당신에게 당신의 대답을 줄 것입니다.

0

미적분에 달의 날짜를 지킬 필요가 없다면 나는가는 길이라고 생각합니다.

0

수식은 receivedDate의 첫 번째 달과 dueDate의 달 중 첫 번째 달 사이의 개월 수를 계산합니다. TimeSpan의 대부분의 시간 요소가 TotalXXX로 표시되기 때문에 TotalMonths와 TotalYears를 생략 한 것이 이상하게 보입니다.

월별로 고정 된 일수가 없기 때문에 부분 나머지를 표현하는 방법에서 가장 의미가있는 것이 무엇인지 알기가 어렵다고 생각합니다.

내 공식이 ...

 

int nMonthDiff_FirstToFirst = DateTime.Now.Month - testDate.Month + ((DateTime.Now.Year - testDate.Year)* 12); 

double dMonthDiff = (double)nMonthDiff_FirstToFirst + (DateTime.Now - testDate.AddMonths(nMonthDiff_FirstToFirst)).TotalDays/(double)DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); 
 

그래서 난 당신이 (달의 첫번째에 첫번째 달의)처럼 기본적으로 한 달 차이를 받고 뭘하는지는 그때에 내 testDate 프로젝트입니다 달 차이로 미래. 그런 다음 TimeSpan을 사용하여 TotalDays를 얻은 다음 그 달의 일 수로 나눕니다. 따라서 저는 그 달의 남은 날에 대한 분수 부분을 나타냅니다.

그래서 2012 년 5 월 5 일 -> 2012 년 6 월 3 일이되면 1 개월이 지나지 않은 경우 수식이 월별로 1을 반환합니다. 내 수식에서 투영 된 날짜의 TotalDays는 음의 분수 일 수를 산출하고 '첫 번째에서 첫 번째'달 차이에 더해질 때 필요에 따라이를 가져옵니다.

0

몇 달의 정확한 양을 얻을이 추가 검사를하고있는 중이 야 :

NUMBEROFMONTHS = receiveDate.Month - dueDate.Month + (receiveDate.Year - dueDate.Year) * 12; if (receiveDate.Day> dueDate.Day) numberOfMonths--;

0
int GetMonthsCount(DateTime dtStart, DateTime dtEnd) 
{ 
    return (int)Math.Round((dtEnd - dtStart).TotalMonths); 
} 
관련 문제