c# - 在 C# 中减去 DateOnly

在 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'

回答1

从概念上讲,DateOnly 表示一整天,而不是午夜或给定日期的任何其他特定时间,因此从另一个 DateOnly 中减去一个 DateOnly 不能像 DateTimehttps://docs.microsoft.com/en-us/dotnet/api/system.datetime.op_subtraction?view=net-6.0#system-datetime-op-subtraction(system-datetime-system-datetime)

如果要对 DateOnly 执行算术运算,则需要明确指定所需的单位。

DateOnly 有一个 https://docs.microsoft.com/en-us/dotnet/api/system.dateonly.daynumber?view=net-6.0 属性,它返回自 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;

回答2

您可以使用 DayNumber 属性进行减法,f 将保存 d 和 e 之间的天数。

var f = d.DayNumber - e.DayNumber;

回答3

我不知道他们为什么没有做到这一点的确切原因。但是,如果您查看文档 https://docs.microsoft.com/en-us/dotnet/api/system.dateonly?view=net-6.0 它不包含运算符加法和减法。 https://docs.microsoft.com/en-us/dotnet/api/system.datetime?view=net-6.0 可以。

回答4

要回答您的问题,为什么 - https://docs.microsoft.com/en-us/dotnet/api/system.dateonly?view=net-6.0 在运营商部分它只是没有实现减法,而 https://docs.microsoft.com/en-us/dotnet/api/system.datetime.op_subtraction?view=net-6.0#system-datetime-op-subtraction(system-datetime-system-datetime) 确实有一个。您可以做的是创建自己的扩展程序,类似于此扩展程序。

相似文章

最新文章