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();
}
} |
- 这里的逻辑好像有点问题
- 嗯,一年有几天?365.25或者你在做闰年等?
- 数据变量(verschil应该是TimeSpan而不是DateTime。
- EDOCX1?3?时间跨度不足以容纳DateTime的所有值。
- @安迪克诺涅夫:这个问题只有大约几年时间,而且公认的答案不会处理几个月/天,特别简单。
.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年、6个月和24天)
如果您决定为此使用noda时间,您可以在方法中使用它,在其他地方使用DateTime,并在类型之间转换…但一般来说,更广泛地接受野田时间会更好。其目的是让您的代码比仅仅使用DateTime更清晰。
要得到delta,直接减去:
2
这会给你一个TimeSpan。从那里,您可以访问.Days。然而,月和年要复杂得多。如果你想在这些术语上有所不同,你就必须直接比较p1和p2的属性(或:如jon所说:使用noda time)。
- 不可能,因为闰年,不提月份。想象一下如果你的生日是在2月29日。无论如何,你都得做全日期算术
- @请非常明确地告诉我哪一位是"不可能的"。当然可以减去日期。正如我所指出的,获得年/月增量更为复杂,但仍然是绝对可能的。
- 如果你跨越了一个月的门槛,那么要通过一个时间跨度获得这种差异是不可能的。你需要在每种情况下比较天、月、年。
- @帕纳吉奥提斯卡纳沃斯正是如此;这就是为什么我说"然而,月和年要复杂得多"。如果你想知道这些术语的区别,你就必须直接比较p1和p2的性质。"
- 没有争论过,这是时间跨度,为什么简单的区别是不够的。这是一种不同的算术-通常在小学教。值的每个元素有不同的基和进位。我还记得我在四年级的时候,试图把几年的时间转换成几分钟的时间来计算我的年龄时是怎么失败的。