一尘不染

计算两个日期之间月份的差异

c#

在C#/。NET中TimeSpanTotalDaysTotalMinutes等等,但是我不知道总月差的公式。每月变化的日子和leap年不断让我失望。我如何获得
TotalMonths

编辑
对不起,不是更清晰:我知道我不能真正从得到这个TimeSpan,但我想用TotalDaysTotalMinutes将是一个很好的例子来表达我一直在寻找......除了我试图获得总计个月。

例如:2009年12月25日-2009年10月6日= 2 TotalMonths。10月6日至11月5日等于0个月。1月11日,1个月。12月6日,2个月


阅读 281

收藏
2020-05-19

共1个答案

一尘不染

您将无法从中获取价格TimeSpan,因为“月”是可变的计量单位。您必须自己计算它,并且必须弄清楚您希望它如何工作。

例如,要日期喜欢July 5, 2009August 4, 2009产生一个月或零月区别?如果你说这应该产生一个,然后怎么样July 31, 2009August 1, 2009?是
一个月?它仅仅是Month日期值的差异,还是与实际时间跨度更相关?确定所有这些规则的逻辑很重要,因此您必须确定自己的规则并实施适当的算法。

如果您想要的只是月份中的不同(完全不考虑日期值),则可以使用以下方法:

public static int MonthDifference(this DateTime lValue, DateTime rValue)
{
    return (lValue.Month - rValue.Month) + 12 * (lValue.Year - rValue.Year);
}

请注意,这将返回一个相对差,这意味着如果rValue大于lValue,则返回值将为负。如果需要绝对差异,可以使用以下方法:

public static int MonthDifference(this DateTime lValue, DateTime rValue)
{
    return Math.Abs((lValue.Month - rValue.Month) + 12 * (lValue.Year - rValue.Year));
}
2020-05-19