为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕的地6264312 2019-10-17 10:48:07
在C#/。NET中TimeSpan有TotalDays,TotalMinutes等等,但是我不知道总月差的公式。每月变化的日子和leap年不断让我失望。我如何获得TotalMonths?编辑对不起,不是更清晰:我知道我不能真正从得到这个TimeSpan,但我想用TotalDays而TotalMinutes将表达什么,我一直在寻找......除了我试图获得总月一个很好的例子。例如:2009年12月25日-2009年10月6日= 2 TotalMonths。10月6日至11月5日等于0个月。1月11日,1个月。12月6日,2个月
查看完整描述

3 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

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


例如,要日期喜欢July 5, 2009并August 4, 2009产生一个月或零月区别?如果你说这应该产生一个,然后怎么样July 31, 2009和August 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));

}


查看完整回答
反对 回复 2019-10-17
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞


这是比较痛苦的纯.NET做。我建议我自己的Noda Time库,该库是专门为以下目的而设计的:


LocalDate start = new LocalDate(2009, 10, 6);

LocalDate end = new LocalDate(2009, 12, 25);

Period period = Period.Between(start, end);

int months = period.Months;

(还有其他选择,例如,即使您只想数月甚至数年,也可以使用Period period = Period.Between(start, end, PeriodUnits.Months);)


查看完整回答
反对 回复 2019-10-17
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

也许您不想知道月份分数;这段代码呢?



public static class DateTimeExtensions

{

    public static int TotalMonths(this DateTime start, DateTime end)

    {

        return (start.Year * 12 + start.Month) - (end.Year * 12 + end.Month);

    }

}


//  Console.WriteLine(

//     DateTime.Now.TotalMonths(

//         DateTime.Now.AddMonths(-1))); // prints "1"


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 756 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信