在c#中,我不能对DateOnly
变量使用减法,不像DateTime
。有什么解释吗?
var a = new DateTime(2000, 01, 01);
var b = new DateTime(1999, 01, 01);
//var c = a.Subtract(b);
var c = a - b;
var d = new DateOnly(2000, 01, 01);
var e = new DateOnly(1999, 01, 01);
var f = d - e; // Error - Operator '-' cannot be applied to operands of type 'DateOnly' and 'DateOnly'
概念上DateOnly
表示一整天,而不是午夜或给定一天中的任何其他特定时间,因此,用DateTime
的减法运算符减去一个DateOnly
在逻辑上不能返回TimeSpan
。
如果你想在DateOnly
s上执行算术,你需要明确想要的单元。
DateOnly
有一个DayNumber
属性,它返回从01/01/0001开始的天数,所以如果你想确定2个DateOnly
值之间的天数,你可以这样做:
var d = new DateOnly(2000, 01, 01);
var e = new DateOnly(1999, 01, 01);
var daysDifference = d.DayNumber - e.DayNumber;
您可以使用DayNumber属性进行减法,f将保存d和e之间的天数。
var f = d.DayNumber - e.DayNumber;
考虑一下:2022年6月2日- 2022年6月1日= ?答案是1还是2?它包含整整2天,但差1天。通过强迫我们使用DayNumber,只有一个可能的答案。
我不知道他们为什么不让它成为可能的确切原因。但是如果您查看文档DateOnly
,它不包含操作符加法和减法。DateTime
。
回答你的问题为什么- DateOnly在操作符部分它只是没有减法实现而DateTime确实有一个。你所能做的就是创建你自己的扩展,类似于这个。