【问题标题】:What is the easiest way to get the difference in months between two dates in C#?在 C# 中获取两个日期之间月差的最简单方法是什么?
【发布时间】:2010-02-10 04:53:46
【问题描述】:

在 C# 中获取两个日期之间月差的最简单方法是什么?

ie: (date1 - date2).TotalMonths .. 之类的。谢谢!

【问题讨论】:

  • 您应该清楚“月差”是什么意思。例如,您希望 2010 年 1 月 31 日到 2010 年 2 月 1 日相差 1 个月吗?
  • 是的,在这种情况下,我希望它相差 1 个月。我的要求规定 date1 和 date2 将始终是给定月份的第一天。谢谢!
  • 我用评论更新了我的答案,并且实际上将根据这些新信息更新我的答案文本。
  • 这里是简单而简短的代码,以防万一,你仍然无法得到答案,看这个POSTstackoverflow.com/questions/8820603/…

标签: c# date


【解决方案1】:

鉴于您对原始问题所做的更新:如何编写一个需要两个日期并执行以下操作的函数,

DateTime d1 = new DateTime(2008, 12, 1);
DateTime d2 = new DateTime(2009, 1, 1);

var month_diff = (d2.Year - d1.Year)*12 + (d2.Month - d1.Month);
Console.WriteLine(month_diff);

【讨论】:

    【解决方案2】:

    因为您已经知道您的日期将是每月的第一天:

    int totalMonths = (date2.Year - date1.Year)*12 + date2.Month - date1.Month;
    

    【讨论】:

      【解决方案3】:

      我能建议的最好方法是获取总天数,然后通过相应的除法粗略计算月数。比如:

      DateTime dt1 = new DateTime( 2010, 10, 23);
      DateTime dt2 = new DateTime( 2010, 7, 23);
      TimeSpan ts = dt1 - dt2;
      int days_per_month = 30;
      Console.Write( ts.TotalDays / days_per_month);
      

      如果您真的可以接受像 2010 Feb 1 - 2010 Jan 31 那样返回 1 个月的答案,那么在上面的代码中,您可以通过使用轻松解决这个问题

      Console.Write( dt1.Month - dt2.Month);
      

      这没有考虑到年份,所以我在这里遵循另一个答案。 :)

      【讨论】:

      • 是的,谢谢.. 我现在有了.. 但不够准确。我知道用一个更大的方法我可以准确地计算它..只是想知道我是否缺少更简单的方法。
      • 当应用于非特定单位时间(如月份)时,您能否定义“准确度”? :)
      • 我刚刚看到您对原始帖子的评论。在这种情况下,2 月 1 日 - 1 月 31 日是一个月,您只需减去 Month 属性,即 dt1.Month - dt2.Month。
      【解决方案4】:

      如果您不知道如何在 .net 中计算日期跨度,这里是一个很好的例子:

      DateTime startTime = DateTime.Now;
      DateTime endTime = DateTime.Now.AddSeconds(75);
      
      TimeSpan span = endTime.Subtract ( startTime );
      Console.WriteLine( "Time Difference (seconds): " + span.Seconds );
      Console.WriteLine( "Time Difference (minutes): " + span.Minutes );
      Console.WriteLine( "Time Difference (hours): " + span.Hours );
      Console.WriteLine( "Time Difference (days): " + span.Days );
      

      来源:here

      DateTime 不会显示月份的差异,因为每个月都有不同的天数。获取月份的最简单方法是totaldays / 30

      【讨论】:

      • 不得不同意...这个问题不是很清楚,但这大大偏离了目标,这只是谷歌第一次命中的透明复制和粘贴工作问题的确切文本。 -1.
      【解决方案5】:

      TimeSpan 类:)

       TimeSpan span = endTime.Subtract ( startTime );
       Console.WriteLine( "Time Difference (months): " + span.Days / 30 );
      

      【讨论】:

      • 怎么样?这是最简单的方法吗?
      • 这是不准确的,因为月份有不同的天数。
      • @Will 同意 :) 由于他使用的是“大”单位,我只是假设他需要一个粗略的值 ;)
      猜你喜欢
      • 2014-11-22
      • 1970-01-01
      • 2016-11-06
      • 2016-05-07
      • 2011-06-06
      • 1970-01-01
      相关资源
      最近更新 更多