gpt4 book ai didi

c# - 为什么 DateTime.AddMonths(3).AddMonths(3);给出与 DateTime.AddMonths(6) 不同的结果;?

转载 作者:行者123 更新时间:2023-12-05 08:35:28 48 4
gpt4 key购买 nike

我有一个单元测试,其中预期结果是 DateTime 并且设置如下:

var expectedResult = DateTime.Today.AddMonths(3).AddMonths(3);

之后,我有一个将季度添加到日期的函数:

DateTime.AddMonths(3 * numberOfTimes);

numberOfTimes 在本例中为 2。

结果在日期上有所不同。今天是 31/01/2023,预期结果是 30/07/2023,函数结果是 31/07/2023。

我预计结果会相同,因为 6 个月应该与开始日期的天数相等。我很好奇为什么会这样。现在,我通过在 expectedResult 部分执行 3 * numberOfTimes 来解决问题。

只是出于好奇为什么会发生这种情况?

最佳答案

documented :

The AddMonths method calculates the resulting month and year, takinginto account leap years and the number of days in a month, thenadjusts the day part of the resulting DateTime object. If theresulting day is not a valid day in the resulting month, the lastvalid day of the resulting month is used. For example, March 31st + 1month = April 30th, and March 31st - 1 month = February 28 for anon-leap year and February 29 for a leap year.

因此您会得到不同的结果,因为如果您添加 6 个月,则只需要检查 31/07/2023 是否是有效的日期时间,确实如此。对于 DateTime.Today.AddMonths(3).AddMonths(3),它将首先检查 31/04/2023 是否有效,如果无效,则返回 30/04/2023,然后返回 3 个月已添加。

关于c# - 为什么 DateTime.AddMonths(3).AddMonths(3);给出与 DateTime.AddMonths(6) 不同的结果;?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75296217/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com