年,月,日2天之间的差异

我需要输出两年,几个月和几天之间的差异。

使用timepan和subtract我只能获得日期,但是可以按年,月和日输出。

这是我到目前为止:

public string Leeftijdsverschil(DateTime p1, DateTime p2) { if (p1 > p2) { DateTime verschil = p1.Subtract(TimeSpan.FromTicks(p2.Ticks)); return verschil.ToString(); } else { DateTime verschil = p2.Subtract(TimeSpan.FromTicks(p1.Ticks)); return verschil.ToString(); } } 

.NET类型没有给你一个合适的答案,而不必编写代码来尝试一个答案并适当调整,但我的Noda Time项目旨在处理这类事情。 例如:

 LocalDate x = new LocalDate(2013, 5, 21); LocalDate y = new LocalDate(2014, 12, 15); Period p = Period.Between(x, y); Console.WriteLine("{0} {1} {2}", p.Years, p.Months, p.Days); 

结果:

 1 6 24 

(即1年,6个月和24天)

如果你决定使用Noda Time,你可以在你的方法中使用,在其他地方使用DateTime并在类型之间进行转换……但是更广泛地接受Noda Time通常会更好。 其目的是让您的代码更清晰,而不仅仅是使用DateTime

要获得delta,只需直接减去:

 var delta = p1 - p2; 

这为您提供了TimeSpan 。 从那里,您可以访问.Days 。 然而,数月和数年要复杂得多。 如果你想要这些术语的差异,你必须直接比较p1p2的属性(或者:如Jon所说:使用Noda Time)