为何在C#中两个DateTime变量相减会得到TimeSpan类型?
为什么C#中两个DateTime相减返回TimeSpan而非DateTime?
DateTime在C#里代表具体的时间点,比如“2024年10月5日14:30”。两个时间点相减,本质是计算它们之间的时间间隔,用TimeSpan类型表示才合理——毕竟你要的是“两个时间差了多久”,而非“一个新的时间点”。
举个现实例子:今天(10月5日)减去昨天(10月4日),得到的是“1天”的时长,而非某个新日期,这完全契合TimeSpan的语义。
你提到的整数相减(Code C)和DateTime逻辑不同:整数是纯数值,两个数值相减结果依然是数值,返回同类型理所当然,但DateTime的语义是时间点,不能直接和数值类比。
代码示例解析
正确写法(Code A)
DateTime dt1 = DateTime.FromOADate(lastVisted); DateTime dt2 = DateTime.Now; TimeSpan difference = dt2 - dt1;
这段代码逻辑通顺,dt2 - dt1算出两个时间点的间隔,结果存入TimeSpan变量后,可用来获取天数、小时数等具体时长信息。
错误写法(Code B)
DateTime dt1 = DateTime.FromOADate(lastVisted); DateTime dt2 = DateTime.Now; DateTime difference = dt2 - dt1;
这段代码会编译失败,因为DateTime相减的返回值是TimeSpan,和左侧的DateTime类型不匹配,编译器无法通过。
整数相减(Code C)
int a = 5; int b = 4; int c = a - b;
整数是纯数值类型,相减结果还是数值,类型匹配,逻辑成立。
额外说明
如果你的需求是从一个时间点减去一段时长,得到另一个时间点,应该用DateTime.Subtract(TimeSpan)方法,比如:
// 从当前时间往前推7天,得到新的DateTime DateTime newDate = DateTime.Now.Subtract(TimeSpan.FromDays(7));
内容的提问来源于stack exchange,提问作者HelloCW
相关产品推荐
相关产品推荐

