使用TimeOnly结构体与DateTime进行日期时间计算的相关问询
结论
你提供的运算代码无法直接通过编译,.NET 没有为DateTime和TimeOnly类型定义原生的加减运算符重载,该写法本身不符合两个类型的语义设计。
原因说明
TimeOnly的定位是表示「一天内的某个时间点」,和代表「时间长度」的TimeSpan语义完全不同,因此不能直接和代表「完整时间点」的DateTime做算术运算。
如果你要实现「去掉DateTime的时间部分,拿到当日零点的DateTime」的需求,有两种合法的实现方案:
- 直接调用DateTime的
Date属性,不需要额外运算:DateTime result = DateTime.Parse("2021-01-01 10:00").Date; // 结果为 2021-01-01 00:00:00,符合你的预期 - 先将
TimeOnly转换为TimeSpan类型再做减法:DateTime originalDt = DateTime.Parse("2021-01-01 10:00"); TimeOnly timeToSubtract = TimeOnly.Parse("10:00"); DateTime result = originalDt - timeToSubtract.ToTimeSpan(); // 结果和直接调用Date属性一致
拓展场景
如果你的需求是替换DateTime的时间部分为指定的TimeOnly值,可以用如下写法:
DateTime originalDt = DateTime.Parse("2021-01-01 10:00"); TimeOnly targetTime = TimeOnly.Parse("16:30"); DateTime result = DateOnly.FromDateTime(originalDt).ToDateTime(targetTime); // 结果为 2021-01-01 16:30:00
内容的提问来源于stack exchange,提问作者ˈvɔlə
相关产品推荐
相关产品推荐

