请问在C#中如何返回两个日期相差的天数或月数?

my98800 2005-06-17 08:35:25
请问在C#中如何返回两个日期相差的天数或月数?
...全文
2993 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
singlepine 2005-06-20
  • 打赏
  • 举报
回复
private double DateDiff(string howtocompare, System.DateTime startDate, System.DateTime endDate)
{
double diff=0;
System.TimeSpan TS = new System.TimeSpan(endDate.Ticks-startDate.Ticks);

switch (howtocompare.ToLower())
{
case "year":
diff = Convert.ToDouble(TS.TotalDays/365);
break;
case "month":
diff = Convert.ToDouble((TS.TotalDays/365)*12);
break;
case "day":
diff = Convert.ToDouble(TS.TotalDays);
break;
case "hour":
diff = Convert.ToDouble(TS.TotalHours);
break;
case "minute":
diff = Convert.ToDouble(TS.TotalMinutes);
break;
case "second":
diff = Convert.ToDouble(TS.TotalSeconds);
break;
}

return diff;
}


烤火的鱼 2005-06-20
  • 打赏
  • 举报
回复
月数很简单,日期的年数×12+月数,两个都这么计算了再相减就可以了,如果计算工龄还要加1个月,道理也很简单,第一个月要算工龄的
silverseven7 2005-06-20
  • 打赏
  • 举报
回复
dateTime1 = DateTime.Now;
...
TimeSpan ts = dateTime1 - dateTime2;
Console.WriteLine("天数" + ts.Days);
月数在做除法,30天还是31天随便
dateTime1 = DateTime.Now;
...
TimeSpan ts = dateTime1 - dateTime2;
Console.WriteLine("天数" + ts.Days);
月数在做除法,30天还是31天随便
dateTime1 = DateTime.Now;
...
TimeSpan ts = dateTime1 - dateTime2;
Console.WriteLine("天数" + ts.Days);
月数在做除法,30天还是31天随便
dateTime1 = DateTime.Now;
...
TimeSpan ts = dateTime1 - dateTime2;
Console.WriteLine("天数" + ts.Days);
月数在做除法,30天还是31天随便
dateTime1 = DateTime.Now;
...
TimeSpan ts = dateTime1 - dateTime2;
Console.WriteLine("天数" + ts.Days);
月数在做除法,30天还是31天随便
juluan 2005-06-20
  • 打赏
  • 举报
回复
以上是我自己寫的,大家看看能用不~~ 嘿嘿
juluan 2005-06-20
  • 打赏
  • 举报
回复
/// <summary>
/// 得到2個日期的指定格式間隔
/// </summary>
/// <param name="dt1">日期1</param>
/// <param name="dt2">日期2</param>
/// <param name="dateformat">間隔格式: y:年 M:月 d:天 h:小時 m:分鐘 s:秒 fff:毫秒 ffffff:微妙 fffffff:100毫微妙</param>
/// <returns>間隔 long型</returns>
public static long GetIntervalOf2DateTime(DateTime dt1,DateTime dt2,string dateformat)
{
try
{
long interval = dt1.Ticks - dt2.Ticks;
DateTime dt11;
DateTime dt22;

switch(dateformat)
{
case "fffffff"://100毫微妙
break;
case "ffffff"://微妙
interval /= 10;
break;
case "fff"://毫秒
interval /= 10000;
break;
case "s"://秒
interval /= 10000000;
break;
case "m"://分鐘
interval /= 600000000;
break;
case "h"://小時
interval /= 36000000000;
break;
case "d"://天
interval /= 864000000000;
break;
case "M"://月
dt11 = (dt1.CompareTo(dt2) >= 0)?dt2:dt1;
dt22 = (dt1.CompareTo(dt2) >= 0)?dt1:dt2;
interval = -1;
while(dt22.CompareTo(dt11) >= 0)
{
interval ++;
dt11 = dt11.AddMonths(1);
}
break;
case "y"://年
dt11 = (dt1.CompareTo(dt2) >= 0)?dt2:dt1;
dt22 = (dt1.CompareTo(dt2) >= 0)?dt1:dt2;
interval = -1;
while(dt22.CompareTo(dt11) >= 0)
{
interval ++;
dt11 = dt11.AddMonths(1);
}
interval /= 12;
break;
}
return interval;
}
catch(Exception ex)
{
string error = ex.Message;
return 0;
}
}
acenk 2005-06-20
  • 打赏
  • 举报
回复
d1-d2 就是天数

月数 (d1.Year-d2.Year)*12+d1.Month-d2.Month
nethawkc 2005-06-20
  • 打赏
  • 举报
回复
TotalDay.Text=(DateTime.Parse(Day1Edit.Text)-DateTime.Parse(Day2Edit.Text)).TotalDays.ToString(); //相差的天数

TotalHour.Text=(DateTime.Parse(Day1Edit.Text)-DateTime.Parse(Day2Edit.Text)).TotalHours.ToString(); //相差的小时

TotalMinute.Text=(DateTime.Parse(Day1Edit.Text)-DateTime.Parse(Day2Edit.Text)).TotalMinutes.ToString(); //相差的分钟

至于相差的月数, 这要自己算了, 没有直接的函数可以用
zhongwanli 2005-06-20
  • 打赏
  • 举报
回复
二楼
happyapple050429 2005-06-20
  • 打赏
  • 举报
回复
天数是直接相减就得了,上面说了,月数的话麻烦,我自己也写了个,不过我的日期相差大,所以用的是年,不一定适合你,你先看下算法:
一,判断两日期之间有没包括2月份日期。
二,判断各年是否润年(因为润年2月为29天)。
三,直接用两日期相差的天数减掉润年多出的天数,除以365,得出所差年数。
四,年数乘以12就得月数。


这种方法只适合两日期相差大的时候,希望哪位有更好的算法!大家共同进步!
fanruinet 2005-06-17
  • 打赏
  • 举报
回复
dateTime1 = DateTime.Now;
...
TimeSpan ts = dateTime1 - dateTime2;
Console.WriteLine("天数" + ts.Days);
月数在做除法,30天还是31天随便
真相重于对错 2005-06-17
  • 打赏
  • 举报
回复
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemdatetimeclassop_subtractiontopic.htm

110,533

社区成员

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

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

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