第一个问题
我有一个 boost 日期对象如下:
boost::gregorian::date 今天(2012, 02, 13)
我从 Today 中减去一个日期部分,如下所示:
今天 - 月(240)或今天 - 天(X)等..
请问在做上述减法时是否有办法排除周末和特殊假期?我的意思是,如果今天是星期三,那么今天 - days(4) 应该是上周五。
第二个问题
同样,我使用类似下面的方法来进行时间操作:
ptime ptNow(day_clock::local_day()); ptNow - 分钟(1170);
- 还有一种方法可以通过减去分钟/小时来忽略周末/节假日吗?
- 我真的希望我的 1170 分钟成为 1170 交易分钟(即 19.5 个交易小时/每天 6.5 小时)。换句话说,我希望一天的开始时间是美国东部时间上午 9:30,结束时间是美国东部时间下午 16:00,如果我调用 ptNow - 分钟 (1170),它应该让我回到 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()
是一个非常棘手的问题。处理它的最简单方法是有一个已知假期表,并检查作为参数传递的日期是否与其中任何日期一致。在我看来,最好有一个基于规则的方法来计算给定日期是否是假期。
关于c++ - 如何在 boost 日期时间中忽略周末和假期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9416637/