我有一份报告,每年运行一次Top Heavy测试。此报告要求运行具有上一年度上一次工资核算运行的输入参数的工资核算存储过程。员工每周工作两周,所以我用“种子”日期计算如下:
public DateTime GetLastPayDayOfYearFromDate(DateTime myDate)
{
string myDay = myDate.DayOfWeek.ToString();
while (myDay != "Friday")
{
myDate = myDate.AddDays(-1);
myDay = myDate.DayOfWeek.ToString();
}
DateTime mySeedDate = DateTime.Parse("01/02/1970");
TimeSpan myTimeSpan = myDate.Subtract(mySeedDate);
int myDaysDifference = myTimeSpan.Days;
int test = (myDaysDifference % 14);
if (myDaysDifference % 14 != 0)
{
myDate = myDate.AddDays(-7);
}
return myDate;
}
这通常与我想要的方式完全一致,但我遇到了一个意料之外的异常。如果您查看2015年日历,2015年12月18日确实是2015年周五的最后一个工资单,所以2016年1月1日通常是发薪日,但在这种情况下,自2016年1月1日起是假期该公司周四公布了工资单。因此,最后一个工资单实际上是12/31/2015,但我上面的代码不会产生该日期。
这种情况很少会发生,但DID会发生,因此报告不准确。我们如何可靠地编码这些异常,然后是不可避免的“例外异常?”