【问题标题】:Subtract DateOnly in C#在 C# 中减去 DateOnly
【发布时间】:2022-08-04 01:46:28
【问题描述】:

在 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 上使用扩展名 .To DateTime(bool dateOnly) ,这样您就可以拥有 DateTime 的行为
  • @Amit Verma 感谢您的回答,但不是真的。我需要使用 DateOnly 结构而不是链接中使用的 DateTime。
  • 既然您不要求解决方案,我认为我的回答就足够了吗?
  • 当它是introduced 时:\"a DateOnly 表示整个日期(从一天的开始到一天的结束)\"。从另一个中减去其中一个将是有问题的,因为有 3 个可能的答案取决于您想要考虑的起点和终点的包容性。

标签: c# .net-6.0


【解决方案1】:

从概念上讲,DateOnly 代表一整天,而不是午夜或给定日期的任何其他特定时间,因此从另一个 DateOnly 中减去一个 TimeSpan 不能像 DateTimesubtraction operator 那样在逻辑上返回一个 TimeSpan

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

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;

【讨论】:

    【解决方案2】:

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

    var f = d.DayNumber - e.DayNumber;
    

    【讨论】:

      【解决方案3】:

      我不知道他们为什么没有做到这一点的确切原因。但是,如果您查看文档DateOnly,它不包含运算符加法和减法。 DateTime 确实如此。

      【讨论】:

        【解决方案4】:

        要回答您的问题,为什么 - DateOnly 在运算符部分它只是没有实现减法,而 DateTime 确实有减法。您可以做的是创建您自己的扩展程序,类似于此扩展程序。

        【讨论】:

          【解决方案5】:

          考虑一下:2022 年 6 月 2 日 - 2022 年 6 月 1 日 = ?答案是 1 还是答案 2?它包含 2 天,但差异是 1。通过强制我们使用 DayNumber,只有一个可能的答案。

          【讨论】:

            猜你喜欢
            • 2022-06-11
            • 2020-08-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-02-20
            • 1970-01-01
            相关资源
            最近更新 更多