【发布时间】:2011-07-14 07:39:50
【问题描述】:
更新:这个故事的寓意是相信直觉,而不是去寻找问题。最后,用户报告的问题完全不同,正如 Jon 强调的那样,我们在测试中引入了一个错误,我们错过了,因为结果似乎验证了正在寻找的内容。
原问题:
在许多应用程序中都需要显示开始/结束日期,其中结束日期包含一个日历年。因此,如果开始日期是 2012 年 1 月 1 日,则结束日期是 2012 年 12 月 31 日。基本规则是加一年,请假 - 作为一种扩展方法:
public static DateTime CalendarYear(this DateTime dateTime)
{
return dateTime.AddYears(1).AddDays(-1);
}
但是,上面的代码不能处理闰年!在从 2011 年 1 月 1 日到 2014 年 12 月 31 日的测试期间,我们的单元测试标记了 365 次预期日期与确定的结束日期不匹配的事件。定义错误边界的日期是:
- 开始日期:2011 年 3 月 1 日,预计结束日期:2012 年 2 月 28 日:实际结束 日期:2012 年 2 月 29 日
- 开始日期:2012 年 2 月 28 日,预计结束日期:2 月 26 日 2013 年:实际结束日期:2013 年 2 月 27 日
2011 年 3 月 1 日之前的日期按预期运行,2012 年 2 月 28 日之后的日期按预期运行。
我知道测试失败的原因是因为开始/结束日期包含 2 月 29 日闰年事件,但有没有人有一个简单、可靠的建议(应对闰年事件)来替换基本的“ AddYears(1).AddDays(-1)" 快速确定日历年?
【问题讨论】:
-
使用 DateTime.IsLeapYear 方法怎么样?