如何计算两个日期之间间隔月数的算法

lennon1958 2009-03-14 08:58:15
请大家帮忙设计一个可以自动计算两个日期之间间隔月数的算法
例如: 我想计算2008年3月1号至2008年4月30号之间是多少个月,应该是14个月,
而2008年3月31号至2008年4月30号之间则是13个月。
我希望编一个程序能够自动计算这样的问题。或者C#中是否有现成的方法可以用,
谢谢。
...全文
1769 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lemon2050 2011-09-08
  • 打赏
  • 举报
回复
方法1:
DateTime dt1=Convert.ToDateTime("2007-03-1");
DateTime dt2 = Convert.ToDateTime("2008-04-30");
int month = (dt2.Year - dt1.Year) * 12 + (dt2 .Month- dt1.Month);
Console.WriteLine(month);
方法2:
DateTime dt3 = Convert.ToDateTime("2007-03-1");
DateTime dt4 = Convert.ToDateTime("2008-04-30");
int days = (int)(dt4 - dt3).TotalDays;
Console.WriteLine(days/31);
第二种方法可能不太精确,特别是当日期差距很大的时候
ajax_yuren 2011-09-08
  • 打赏
  • 举报
回复
public void Def(DateTime begin,DateTime end)
{
int i = 0; //间隔月数
while (begin > end)
{
i++;//日期不足加一个月
begin.AddMonths(1);
//i++; //日期不足一个月舍去

}
return i;
}
--转至ajax_yuren QQ:312430633
shadow_2006 2009-06-17
  • 打赏
  • 举报
回复
收藏!
diffmaker 2009-06-17
  • 打赏
  • 举报
回复
这是我自己在使用中的方法,不知有没有偏差
diffmaker 2009-06-17
  • 打赏
  • 举报
回复
仿SQLServer的函数写的


#region 枚举值
/// <summary>
/// 日期枚举值
/// </summary>
public enum DatePart
{
/// <summary>
/// 年
/// </summary>
YY,
/// <summary>
/// 月
/// </summary>
MM,
/// <summary>
/// 日
/// </summary>
DD,
/// <summary>
/// 时
/// </summary>
HH,
/// <summary>
/// 分
/// </summary>
MI,
/// <summary>
/// 秒
/// </summary>
SS,
/// <summary>
/// 毫秒
/// </summary>
MS
}

#endregion


#region DateDiff(),返回两个日期的时间差
/// <summary>
/// 返回两个日期的时间差
/// </summary>
/// <param name="datepart">DatePart枚举值</param>
/// <param name="starttime">起始时间</param>
/// <param name="endtime">结束时间</param>
/// <returns></returns>
public static long DateDiff(DatePart datepart, DateTime starttime, DateTime endtime)
{
long rtn = 0;
TimeSpan start = new TimeSpan(starttime.Ticks);
TimeSpan end = new TimeSpan(endtime.Ticks);
TimeSpan delta = end.Subtract(start);
long year = endtime.Year - starttime.Year;
long month = year * 12 + (endtime.Month - starttime.Month);
long day = (long)delta.TotalDays;
long hour = (long)delta.TotalHours;
long minute = (long)delta.TotalMinutes;
long second = (long)delta.TotalSeconds;
long milliseconds = (long)delta.TotalMilliseconds;
switch (datepart)
{
case DatePart.YY:
rtn = year;
break;
case DatePart.MM:
rtn = month;
break;
case DatePart.DD:
rtn = day;
break;
case DatePart.HH:
rtn = hour;
break;
case DatePart.MI:
rtn = minute;
break;
case DatePart.SS:
rtn = second;
break;
case DatePart.MS:
rtn = milliseconds;
break;
}
return rtn;
}

#endregion
diffmaker 2009-06-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 lennon1958 的帖子:]
请大家帮忙设计一个可以自动计算两个日期之间间隔月数的算法
例如: 我想计算2008年3月1号至2008年4月30号之间是多少个月,应该是14个月
2008年3月31号至2008年4月30号之间则是13个月
我希望编一个程序能够自动计算这样的问题。或者C#中是否有现成的方法可以用,
谢谢。
[/Quote]

我晕,怎么算出来的?
liuhj168 2009-06-17
  • 打赏
  • 举报
回复
//月数
int c_Month=0;
c_Month = (Convert.ToInt32(c_Date.Year) - Convert.ToInt32(s_Date.Year)) * 12;
c_Month = c_Month + (Convert.ToInt32(c_Date.Month) - Convert.ToInt32(s_Date.Month));
return c_Month;
zgke 2009-03-14
  • 打赏
  • 举报
回复
2008年3月1号至2008年4月30号 是 2007年3月1号至2008年4月30号把
DateTime _Date1 =DateTime.Parse("2007-03-1");
DateTime _Date2 =DateTime.Parse("2008-04-30");
TimeSpan _Span =_Date1-_Date2;
int _M =(int)(_Span.TotalDays/30);
MessageBox.Show(_M.ToString());

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧