DateTime dayStart;
DateTime dateEnd;
TimeSpan ts = dateEnt - dateStart;
인쇄 : ... 년 (들)과 ... 월 (들)두 날짜 간의 연도 및 월 차이점을 찾는 방법은 무엇입니까?
가내가 그것을 어떻게 계산할 수 ?
.NET 프레임 워크 2.0
C#을
asp.net 프로젝트.
DateTime dayStart;
DateTime dateEnd;
TimeSpan ts = dateEnt - dateStart;
인쇄 : ... 년 (들)과 ... 월 (들)두 날짜 간의 연도 및 월 차이점을 찾는 방법은 무엇입니까?
가내가 그것을 어떻게 계산할 수 ?
.NET 프레임 워크 2.0
C#을
asp.net 프로젝트.
정확히 계산할 내용에 따라 다릅니다.
년 및 월의 길이가 다양하기 때문에 TimeSpan
의 값을 정확한 년 및 월로 변환 할 수 없습니다. 이 같은 대략 년 개월을 계산할 수 있습니다
int years = ts.Days/365;
int months = (ts.Days % 365)/31;
당신이 정확한 차이를 원한다면, 당신은 DateTime
값을 비교해야합니다.
You should first read this articleJon Skeet에서 "기간 및 기간 산술 소개"텍스트에서 특히 흥미로워집니다.
그래서, 당신은 일정 기간이 한 달에 변화가있을 때
Noda-time 이미이를위한 기능을 많이 포함 등 해에 정의해야합니다. 그러나 나는 그것이 아직 공개되지 않았다고 생각한다.
가, 다른 사람들이 나를 위해 그것을한다면 Noda Time을 언급 할 것이라는 전망에 흥분한 질문에 오는 것은 무엇입니까? ;) –
@ 존 : 죄송합니다, 그냥 기억 나는 기사를 읽었습니다. – GvS
와우, 나는 결코 Noda-Time을 들어 본 적이 없으며 날짜/시간 범위를 계산하는 복잡성에 대해서는 절대로 생각하지 않았습니다. 링크를 읽는 것은 처음으로 게시 된 것입니다. "예 ... 맞습니다. 어떻게 그런 생각을하지 않았습니까?" +1, StackOverflow의 제작자 덕분에이 늙은 개가 또 다른 새로운 트릭을 배울 수있게 할 생각이 생겼습니다. – David
는이 같은 뭔가를 할 것이라고 생각 :
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 개월 년 항상 있기 때문에, 없다 (최소한 우리 달력에서).
날짜 시간 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);
여기서 많은 정의가 필요합니다. 2011 년 1 월 31 일부터 2010 년 1 월 2 일까지 몇 개월? 분수를 원하면 한 달이 얼마나 걸립니까? –