Как игнорировать выходные и праздничные дни в буст-дата? - PullRequest
3 голосов
/ 23 февраля 2012

Первый вопрос

У меня есть объект даты повышения следующим образом:

повышение :: григорианский :: дата сегодня (2012, 02, 13)

Я вычитаю часть даты из Today следующим образом:

Today - месяцы (240) или Today - дни (X) и т. Д.

Я бы хотел, если есть способ исключить выходные и специальные праздники при выполнении вышеупомянутого вычитания? Я имею в виду, если сегодня среда, сегодня - дни (4) должны быть в прошлую пятницу.

Второй вопрос

Точно так же я использую что-то вроде следующего для манипулирования временем:

ptime ptNow (day_clock :: local_day ()); ptNow - минуты (1170);

  • Опять же, есть ли способ игнорировать выходные / праздничные дни из вычитания минут / часов?
  • Я действительно хочу, чтобы мои 1170 минут были 1170 минутами торговли (что составляет 19,5 часов торговли / 6,5 часов в день). Другими словами, я хочу, чтобы мое начало дня было 9:30 утра по восточному поясному времени, а конец - 16:00 вечера по восточному поясному времени, и если я позвоню по номеру ptNow - минуты (1170), это должно вернуть меня к 1170 минутам торговли.

1 Ответ

2 голосов
/ 01 марта 2012

Когда дело касается праздников, на самом деле есть только один вариант: один день за один раз. Вы должны выполнять итерацию, один день за раз, и добавлять / вычитать по мере необходимости, если день «считается». В псевдокоде:

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(), с другой стороны, очень крепкий орешек. Самый простой способ справиться с этим - иметь таблицу известных праздников и проверить, совпадает ли дата, переданная в качестве параметра, с любым из них. На мой взгляд, лучше иметь метод, основанный на правилах, который может вычислить, является ли данная дата праздником или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...