2年,数年和数天之间的差异

时间:2014-12-15 09:28:10

标签: c# .net datetime

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

使用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();
    }
}

2 个答案:

答案 0 :(得分:12)

.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

答案 1 :(得分:2)

要获得增量,只需直接减去:

var delta = p1 - p2;

这会给你一个TimeSpan。从那里,您可以访问.Days。然而,数月和数年要复杂得多。如果您希望这些术语存在差异,则必须直接比较p1p2的属性(或者:如Jon所说:使用Noda Time)