c++ - 如何在 boost 日期时间中忽略周末和假期?

标签 c++ boost

第一个问题

我有一个 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/

相关文章:

c++ - Cudd:提取变量排序

c++ - 我怎样才能并行化一个for使用boost?

c++ - boost 线程 : How can I pass a scoped_lock to a callee?

c++ - epoll 在客户端断开连接时循环

c++ - 删除二叉树节点的正确方法

Makecontext 参数 #2 的 C++0x lambda

c++ - boost asio 在读取时占用 100% cpu

Python套接字未从C++ Boost asio接收所有数据

c++ - Boost::spirit::qi 解析器不消耗整个字符串

c++ - 使用 std c++11 中的 Boost Test Unit 进行编译