第一个问题

我有一个升迁日期对象,如下所示:

提升::公历::今天的日期(2012,02,13)

我从今天减去一个日期部分,如下所示:

今天-几个月(240)或今天-天(X)等。

我想在做上述减法时是否有排除周末和特殊假期的方法吗?我的意思是,如果今天是星期三,今天-days(4)应该是上星期五。

第二个问题

同样,我使用类似以下内容的时间进行操作:

ptime ptNow(day_clock::local_day());
ptNow-分钟(1170);

  • 还是有一种方法可以忽略分钟/小时的减法来计算周末/节假日吗?
  • 我真的希望我的1170分钟能成为1170个交易分钟(即19.5个交易时间/每天6.5小时)。换句话说,我希望今天的开始时间为美国东部标准时间上午9:30,结束时间为美国东部标准时间下午16:00,如果我致电ptNow-minutes(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()是一个很难破解的螺母。处理此问题最简单的方法是拥有一个已知假期表,并检查作为参数传递的日期是否与那些假期中的任何一个一致。我认为,最好有一个基于规则的方法,可以计算给定日期是否是假期。

    10-04 18:05