C#DateTime增加一天的假期
有人能解释一下为什么这个单元测试失败了吗 我浏览了MSDN,希望找到一个解释,例如,我希望找到类似“开始日期不包括在内”之类的内容,但我没有找到这样的陈述。因此,我感到困惑,为什么这似乎是一个关闭了一天 以下结果将于9月29日公布。我期待9月30日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
[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小时是一样的。我真诚地想弄清楚你最初的思维过程