关于c#:年,月和日的2天之间的差异

Difference between 2 days in years, months and days

本问题已经有最佳答案,请猛点这里访问。

我需要在年、月和天中输出2天之间的差异。

有了时间跨度和减法,我只能得到天数,但是否有可能以年、月和天的形式输出。

这就是我目前为止所拥有的:

1
2
3
4
5
6
7
8
9
10
11
12
13
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项目是为处理这类问题而设计的。例如:

1
2
3
4
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
1 6 24

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

如果您决定为此使用noda时间,您可以在方法中使用它,在其他地方使用DateTime,并在类型之间转换…但一般来说,更广泛地接受野田时间会更好。其目的是让您的代码比仅仅使用DateTime更清晰。


要得到delta,直接减去:

2

这会给你一个TimeSpan。从那里,您可以访问.Days。然而,月和年要复杂得多。如果你想在这些术语上有所不同,你就必须直接比较p1p2的属性(或:如jon所说:使用noda time)。