如何将两个日期之间的差异显示为00Y 00M

时间:2009-04-21 08:39:50

标签: c# datetime

在C#中给出两个日期时间,如何显示年和月的差异?

我可以在简单减法的时间跨度上做基本的算术,但这不会考虑月份,闰年等不同的长度。

感谢您的帮助。

5 个答案:

答案 0 :(得分:2)

因为基础表示是从公元1月1日午夜12点开始以100纳秒的时间间隔测量的,所以减法将非常正确地处理闰年等:

DateTime date1 = ...
DateTime date2 = ...

// date2 must be after date1

TimeSpan difference = date2.Subtract(date1);
DateTime age=new DateTime(tsAge.Ticks); 

int years = age.Years - 1;
int months = age.Month - 1;

Console.WriteLine("{0}Y, {1}M", years, months);

答案 1 :(得分:1)

FWIW这就是我最终的目标

        DateTime servicelength = new DateTime(DateTime.Now.Subtract(employee.StartDate).Ticks);
        LengthOfService.Text = String.Format("{0}Y {1}M", servicelength.Year - 1, servicelength.Month - 1);

答案 2 :(得分:0)

你可以试试这个:

DateTime date1 = new DateTime(1954, 7, 30);
DateTime today = DateTime.Now;

TimeSpan span = today - date1;
DateTime age = DateTime.MinValue + span;

int years = age.Year - 1;
int months = age.Month - 1;
int days = age.Day - 1;

Console.WriteLine("years: {0}, months: {1}, days: {2}", years, months, days);

答案 3 :(得分:0)

月份长短不一?应该在哪个月?时间跨度不限于一年中的某一年或一个月。您只能计算两个日期之间的天数:

Timspan span = date2 - date1;

Console.Writeline("Days between date1 and date2: {0}", span.Days);

从DateTime.MinValue计算只需将0001作为开始,并计算从1月开始的月份。我不认为这是实用的。

修改

有另一个想法。您可以计算date1之后的月份:

// primitive, inelegant, but should work if date1 < date2
int years = date2.Year - date1.Year;
int month = date2.Month - date1.Month;
if (month < 0) 
{
  years -= 1;
  month += 12;
}
Console.Writeline("{0}Y {1}M", years, month);

这里的问题是你只是忽略了这些日子。毕竟这不是一个好的解决方案。

答案 4 :(得分:0)

在此示例中,由于它是UTC DateTime (您还可以为“现在”定义任何其他日期)

DateTime now = DateTime.UtcNow;
DateTime birthdate = new DateTime (1976,11,12);
DateTime age = now.AddYears(-birthdate.Year).AddMonths(-birthdate.Month).AddDays(-birthdate.Day);

如果在生日中定义,则可以继续输入小时,分钟,秒等。

现在您可以提取年龄中的年月日

int years = age.Year
int month = age.Month

以此类推