дата - как получить следующий рабочий день (игнорируют выходные)

Я столкнулся с этой проблемой недавно при установке нового сервера, который требовал от меня входа в крошечную подсказку входа на микропечать. Это было моё (специфичное для Debian) исправление.

Вы можете установить шрифт консоли следующим образом:

     $ sudo dpkg-reconfigure console-setup

Сначала выберите кодировку. Вы почти наверняка захотите UTF-8.

Затем выберите набор символов. Вы, вероятно, захотите использовать значение по умолчанию. Если есть сомнения и вы используете английский или аналогичный язык письма, вам, вероятно, понадобится Latin1 / Latin5.

Теперь выберите шрифт консоли.Шрифты «Fixed», «Terminus», «Terminus Bold» и «VGA», кажется, имеют лучший выбор с точки зрения доступных размеров шрифта, особенно «Terminus / Terminus Bold». (Я обнаружил, что Terminus Bold самый простой для глаз; ваш опыт может отличаться.)

Наконец, выберите размер шрифта. Небольшое объяснение по порядку ... 8x14 и 8x16 - это малый конец того, что вы можете получить, а 14x28 и 16x32 - на большом конце. Если текст вашей консоли изначально был крошечным (как у меня) и вам нужно что-то побольше, вам, вероятно, понадобится 14x28 или 16x32.

Увы, чтобы изменения были постоянными, нам нужно создать сценарий запуска. Введите эту команду:

    $ sudo nano /etc/init.d/setupcon-initial

Дайте файлу именно такое содержимое:

    #!/bin/bash
    /bin/setupcon

Чтобы сохранить и выйти, нажмите Ctrl-x, затем y, затем введите.

Затем выполните следующие команды, чтобы сделать новый скрипт исполняемым и зарегистрировать его для запуска по умолчанию:

    $ sudo chmod 755 /etc/init.d/setupcon-initial
    $ sudo update-rc.d setupcon-initial defaults 

Вы можете спокойно игнорировать любые предупреждения об отсутствующих тегах и переопределениях; сценарий будет нормально работать и без них.

При следующей перезагрузке запросы входа в консоль должны отображаться с выбранным шрифтом и размером консоли. (Я тестировал это в Debian 9 / Stretch перед публикацией, потому что мой сервер Debian 8 / Jessie не имеет подключенного монитора. Принцип должен быть таким же в любом случае.)

0
09.08.2018, 12:39
3 ответа

Вы можете попробовать

date +%s -d"$(( ( $(date +%w)==5 )?3:1 ))days 8:00"

РЕДАКТИРОВАТЬ :, чтобы ответить на ваш комментарий :date +%wвыдает день недели, который затем оценивается «условным оператором» (expr?expr:expr):, если expr1 оценивается как TRUE, оценивается и используется expr2, иначе expr3. Итак, в пятницу у нас день 5, и пробег date +%s -d"3days 8:00, в остальные дни date +%s -d"1days 8:00.

-1
28.01.2020, 04:15

Вот что я придумал для аналогичной нужды. Намного более подробный, чем другой ответ, но это может сделать его более очевидным, что он делает.

last_workday() {
    from_date="${@:-today}"
    day_of_week=$(date +%w --date="${from_date}")

    if [ ${day_of_week} = "0" ] ; then
        look_back=2
    elif [ ${day_of_week} = "1" ] ; then
        look_back=3
    else
        look_back=1
    fi

    date -d "${from_date} - ${look_back} day" +'%Y/%m/%d'
}

next_workday() {
    from_date="${@:-today}"
    day_of_week=$(date +%w --date="${from_date}")
    if [ ${day_of_week} = "5" ] ; then
        look_forward=3
    elif [ ${day_of_week} = "6" ] ; then
        look_forward=2
    else
        look_back=1
    fi

    date -d "${from_date} + ${look_forward} day" +'%Y/%m/%d'
}

for i in $(seq 16); do
    now=$(date +'%Y/%m/%d' --date="today + ${i} day")
    prev=$(last_workday "${now}")
    next=$(next_workday "${now}")
    echo "${now}:  ${prev} ${next}"
done
0
28.01.2020, 04:15

Если вы хотите использовать ksh93, вы можете легко вычислить «следующий будний день 08:00», что, я полагаю, действительно означает первый рабочий день следующей недели. Если вы находитесь в США, первым рабочим днем ​​недели обычно является понедельник.

$ printf "%T\n"                
Tue Jan  5 16:04:37 GMT 2021
$ printf "%T\n" "0 8 * * 1"
Mon Jan 11 08:00:00 GMT 2021
$ printf "%(%s)T\n" "0 8 * * 1"
1610352000
$ 

Ключом к тому, как это работает, является строка "0 8 * * 1", которая представляет пять crontabполей времени и даты. См. справочную страницу crontab(5)для получения подробной информации об этих полях.

Немногие знают, что ksh93форматирование времени распознает определенные части этого квази--формата записи crontab и выводит соответствующую дату в назначенном формате.

1
05.01.2021, 15:17

Теги

Похожие вопросы