Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#DateTime增加一天的假期_C# - Fatal编程技术网

C#DateTime增加一天的假期

C#DateTime增加一天的假期,c#,C#,有人能解释一下为什么这个单元测试失败了吗 我浏览了MSDN,希望找到一个解释,例如,我希望找到类似“开始日期不包括在内”之类的内容,但我没有找到这样的陈述。因此,我感到困惑,为什么这似乎是一个关闭了一天 以下结果将于9月29日公布。我期待9月30日 [Test] public void AddDaysBug_OffByOne() { DateTime end = new DateTime(2018,10,3); DateTime fourDaysEarlier = end.Ad

有人能解释一下为什么这个单元测试失败了吗

我浏览了MSDN,希望找到一个解释,例如,我希望找到类似“开始日期不包括在内”之类的内容,但我没有找到这样的陈述。因此,我感到困惑,为什么这似乎是一个关闭了一天

以下结果将于9月29日公布。我期待9月30日

[Test]
public void AddDaysBug_OffByOne()
{
    DateTime end = new DateTime(2018,10,3);

    DateTime fourDaysEarlier = end.AddDays(-4);

    // this fails. 29!=30
    Assert.AreEqual(fourDaysEarlier.Day,30, "four days prior to October 3 is Sept 30");
}

让我们用这几天的时间来举例说明

第三-1=第二
第二-1=第一
1-1=30
30-1=29


与“正常”数字一样,月份中没有零日。

Setp:28、29、30

十月:1,2,3


所以,(10月3日-4日)等于29日,9月29日似乎是正确的答案

很容易看出你是否每天都在减法

-1天,2018年2月10日

-2天,2018年1月10日

-3天,2018年9月30日


-4天,2018年9月29日

你为什么期望
-4
会导致第30天?我不知道每个月有没有零日?结果是正确的,前四天是“10月2日”、“10月1日”、“9月30日”,最后是“9月29日”,这是前四天,也是
AddDays
正在做的事情。我明白了。我相信我的困惑源于像人一样思考。例如,如果是10月3日,有人问我,“4天前你在干什么?”我会认为他们在问我9月30日的事。然而,像人一样思考是错误的。在这种情况下,代码不会像人类那样“计算”10月3日。为什么不将10月3日也计算为一天?如果是10月3日晚上11点59分,我们难道不在乎23小时59分钟吗?@sapbucket-你是什么意思?这确实考虑到了第三个因素。即使你的时间是10月3日23:59,9月29日(但也是23:59)仍然少了4天。你一次减去一整天,所以一天中的时间显然无关紧要。第三天=1天,第二天=2天,第一天=3天,第三十天=4天…?@sapbucket今天当然是一天,就像其他任何一天一样。但是如果你从今天开始减去一天,那就是昨天,而不是今天。就像数学一样。今天是3点。如果从3中减去1,则得到2,这也没有意义。“一天”和24小时是一样的。我真诚地想弄清楚你最初的思维过程