You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 03:24:27