第一个问题
我有一个升迁日期对象,如下所示:
提升::公历::今天的日期(2012,02,13)
我从今天减去一个日期部分,如下所示:
今天-几个月(240)或今天-天(X)等。
我想在做上述减法时是否有排除周末和特殊假期的方法吗?我的意思是,如果今天是星期三,今天-days(4)应该是上星期五。
第二个问题
同样,我使用类似以下内容的时间进行操作:
ptime ptNow(day_clock::local_day());
ptNow-分钟(1170);
最佳答案
在处理假期时,实际上只有一个选择:一次一天。您应该一次迭代一天,如果一天很重要,请根据需要添加/减去。用伪代码:
date add(date startDate, int daysToAdd) {
int i:=0
endDate:=startDate
while (i<daysToAdd) {
endDate++
if ( NOT(isWeekend(endDate))
AND NOT(isHoliday(endDate)) {
i++
}
}
return endDate
}
isWeekend()
实现起来很简单;另一方面,isHoliday()
是一个很难破解的螺母。处理此问题最简单的方法是拥有一个已知假期表,并检查作为参数传递的日期是否与那些假期中的任何一个一致。我认为,最好有一个基于规则的方法,可以计算给定日期是否是假期。