2011-01-20 8 views
6
DateTime dayStart; 
DateTime dateEnd; 

TimeSpan ts = dateEnt - dateStart; 

인쇄 : ... 년 (들)과 ... 월 (들)두 날짜 간의 연도 및 월 차이점을 찾는 방법은 무엇입니까?

내가 그것을 어떻게 계산할 수 ?

.NET 프레임 워크 2.0
C#을

asp.net 프로젝트.

+0

여기서 많은 정의가 필요합니다. 2011 년 1 월 31 일부터 2010 년 1 월 2 일까지 몇 개월? 분수를 원하면 한 달이 얼마나 걸립니까? –

답변

3

정확히 계산할 내용에 따라 다릅니다.

년 및 월의 길이가 다양하기 때문에 TimeSpan의 값을 정확한 년 및 월로 변환 할 수 없습니다. 이 같은 대략 년 개월을 계산할 수 있습니다

int years = ts.Days/365; 
int months = (ts.Days % 365)/31; 

당신이 정확한 차이를 원한다면, 당신은 DateTime 값을 비교해야합니다.

7

You should first read this articleJon Skeet에서 "기간 및 기간 산술 소개"텍스트에서 특히 흥미로워집니다.

그래서, 당신은 일정 기간이 한 달에 변화가있을 때

Noda-time 이미이를위한 기능을 많이 포함 등 해에 정의해야합니다. 그러나 나는 그것이 아직 공개되지 않았다고 생각한다.

+1

가, 다른 사람들이 나를 위해 그것을한다면 Noda Time을 언급 할 것이라는 전망에 흥분한 질문에 오는 것은 무엇입니까? ;) –

+0

@ 존 : 죄송합니다, 그냥 기억 나는 기사를 읽었습니다. – GvS

+0

와우, 나는 결코 Noda-Time을 들어 본 적이 없으며 날짜/시간 범위를 계산하는 복잡성에 대해서는 절대로 생각하지 않았습니다. 링크를 읽는 것은 처음으로 게시 된 것입니다. "예 ... 맞습니다. 어떻게 그런 생각을하지 않았습니까?" +1, StackOverflow의 제작자 덕분에이 늙은 개가 또 다른 새로운 트릭을 배울 수있게 할 생각이 생겼습니다. – David

2

는이 같은 뭔가를 할 것이라고 생각 :

DateTime date1 = new DateTime(1973, 07, 20); 
    DateTime date2 = new DateTime(2010, 01, 10); 

    // Swap them if one is bigger than the other 
    if (date2 < date1) 
    { 
    DateTime date3 = date2; 
    date2 = date1; 
    date1 = date3; 
    } 

    // Now date2 >= date1. 

    TimeSpan ts = date2 - date1; 

    // Total days 
    Console.WriteLine(ts.TotalDays); 

    // Total years 
    int years = date2.Year - date1.Year; 

    int months = 0; 
    // Total monts 
    if (date2.Month < date1.Month) 
    { 
    // example: March 2010 (3) and January 2011 (1); this should be 10 monts 
    // 12 - 3 + 1 = 10 
    // Take the 12 months of a year into account 
    months = 12 - date1.Month + date2.Month; 
    } 
    else 
    { 
    months = date2.Month - date1.Month; 
    } 
    Console.WriteLine("Years: {0}, Months: {1}", years, months); 

편집 명확히하려면 복잡한 날짜 algorhitms 또는 물건의 종류의 필요 12 개월 년 항상 있기 때문에, 없다 (최소한 우리 달력에서).

3

날짜 시간 DOB = "1981년 10월 18일"년, 월, 일의 나이를 계산합니다 다음; // 생년월일 DateTime now = DateTime.Now;

 // Swap them if one is bigger than the other 
     if (now < dob) 
     { 
      DateTime date3 = now; 
      now = dob; 
      dob = date3; 
     } 
     TimeSpan ts = now - dob; 
     //Debug.WriteLine(ts.TotalDays); 

     int years = 0; 
     int months = 0, days=0; 
     if ((now.Month <= dob.Month) && (now.Day < dob.Day)) // i.e. now = 03Jan15, dob = 23dec14 
     { 
      // example: March 2010 (3) and January 2011 (1); this should be 10 months. // 12 - 3 + 1 = 10 
      years = now.Year - dob.Year-1; 
      months = 12 - dob.Month + now.Month-1; 
      days = DateTime.DaysInMonth(dob.Year, dob.Month) - dob.Day + now.Day; 

      if(months==12) 
      { 
       months=0; 
       years +=1; 
      } 
     } 
     else if ((now.Month <= dob.Month) && (now.Day >= dob.Day)) // i.e. now = 23Jan15, dob = 20dec14 
     { 
      // example: March 2010 (3) and January 2011 (1); this should be 10 months. // 12 - 3 + 1 = 10 
      years = now.Year - dob.Year - 1; 
      months = 12 - dob.Month + now.Month; 
      days = now.Day - dob.Day; 
      if (months == 12) 
      { 
       months = 0; 
       years += 1; 
      } 
     } 
     else if ((now.Month > dob.Month) && (now.Day < dob.Day)) // i.e. now = 18oct15, dob = 22feb14 
     { 
      years = now.Year - dob.Year; 
      months = now.Month - dob.Month-1; 
      days = DateTime.DaysInMonth(dob.Year, dob.Month) - dob.Day + now.Day; 
     } 
     else if ((now.Month > dob.Month) && (now.Day >= dob.Day)) // i.e. now = 22oct15, dob = 18feb14 
     { 
      years = now.Year - dob.Year; 
      months = now.Month - dob.Month; 
      days = now.Day - dob.Day; 
     } 
     Debug.WriteLine("Years: {0}, Months: {1}, Days: {2}", years, months, days); 
관련 문제