DateTime dayStart;
DateTime dateEnd;
TimeSpan ts = dateEnt - dateStart;
打印:......年份和......月份
我该怎么计算呢?
.net framework 2.0
C#
asp.net项目。
答案 0 :(得分:7)
Jon Skeet,特别是来自“介绍期间和期间算术”的文字,对您来说很有趣。
因此,您必须定义某个时段是月份,年份等的变化。
Noda-time已经包含了很多功能。但我认为它尚未发布。
答案 1 :(得分:5)
以下将计算年,月,日的年龄
DateTime dob = "10/18/1981"; // date of birth
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);
答案 2 :(得分:3)
我认为这样的事情会这样做:
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);
编辑澄清:不需要复杂的日期算法或任何类型的东西,因为一年中总有12个月(至少在我们的日历中)。
答案 3 :(得分:3)
这取决于你想要准确计算的内容。
您无法将TimeSpan
中的值转换为确切的年份和月份,因为年份和月份的长度会有所不同。您可以像这样计算大概的年份和月份:
int years = ts.Days / 365;
int months = (ts.Days % 365) / 31;
如果您想要精确的差异,则必须比较DateTime
值。