如何找到两个日期之间的年和月差异?

DateTime dayStart; DateTime dateEnd; TimeSpan ts = dateEnt - dateStart; 

打印:…年份和…月份

我怎么计算呢?

.net framework 2.0
C#

asp.net项目。

这取决于您想要准确计算的内容。

您无法将TimeSpan的值转换为精确的年份和月份,因为年份和月份的长度会有所不同。 您可以像这样计算大约的年数和月数:

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

如果您想要精确的差异,则必须比较DateTime值。

您应该首先阅读 Jon Skeet 撰写的这篇文章 ,特别是文章“Introducing period and period arithmetic”,它会让您感兴趣。

因此,您必须定义某个时段是月份,年份等的变化。

Noda-time已经包含了很多function。 但我不认为它已经发布了。

以下将计算年,月,日的年龄

  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)) // ie 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)) // ie 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)) // ie 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)) // ie 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); 

我认为这样的事情会这样做:

  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个月(至少在我们的日历中)。