【问题标题】:How to ignore weekends and holidays in boost date time?如何在提升日期时间忽略周末和节假日?
【发布时间】:2012-02-23 16:02:45
【问题描述】:

第一个问题

我有一个提升日期对象如下:

boost::gregorian::date Today(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 交易分钟。

【问题讨论】:

  • holidayweekend 是文化惯例。你想要什么规则?例如。周五可能是周末的第一天。

标签: c++ boost


【解决方案1】:

在处理假期时,实际上只有一个选择:一次一天。如果一天“计数”,您应该一次迭代,并根据需要添加/减去。在伪代码中:

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() 是一个很难破解的难题。处理它的最简单方法是有一个已知假期表,并检查作为参数传递的日期是否与其中任何一个一致。在我看来,最好有一个基于规则的方法来计算给定日期是否是假期。

【讨论】:

    猜你喜欢
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多