Получить дату следующей субботы с определенной даты

Я хочу дату предстоящей субботы после определенной даты. Например, для $date1="30-AUG-2015" я хочу получить результат 05-SEP-2015.

Я пробовал все команды ниже без успеха:

 samba@samba:~$ date1="30-AUG-2015" samba@samba:~$ date2=$(date --date='"$date1" +next Saturday') date: invalid date '"$date1" +next Saturday' samba@samba:~$ date1="30-AUG-2015" samba@samba:~$ date2=$(date --date1='next Saturday') date: unrecognized option '--date1=next Saturday' Try 'date --help' for more information. samba@samba:~$ date1="30-AUG-2015" samba@samba:~$ date -d "$date1 next saturday" Sun Aug 30 00:00:00 IST 2015 samba@samba:~$ $date1 -d "next saturday" 30-AUG-2015: command not found 

  • Проверка даты в оболочке
  • Nautilus-script для перемещения файла в один и тот же каталог имен
  • find arcana: невозможно заставить трубу работать в линии -exec
  • Добавить аудио в видеофайл без кодирования, а также синхронизировать аудио FPS с видео FPS
  • Datecalc эквивалент для Linux
  • Сделать ls отличать скрипты от двоичных файлов на выходе
  • Возможное состояние гонки при подключении плагинов для наушников
  • Создание наборов файлов, которые соответствуют заданному размеру носителя для tar -T
  • 3 Solutions collect form web for “Получить дату следующей субботы с определенной даты”

    Я очень рекомендую dateutils для таких вещей. ( yum install dateutils на Fedora 21+ или CentOS / RHEL 7 с EPEL.) Затем просто выполните:

     dateround today sunday 

    Вы можете использовать «сегодня» или заменить фактическую дату:

     $ dateround 2015-08-30 saturday 2015-09-05 

    Если вам нужна дата ввода в определенном формате, например 30-AUG-2015, вы можете использовать -i или --input-format , например:

     $ dateround -i '%d-%b-%Y'30-AUG-2015 saturday 2015-09-05 

    С ksh93 :

     $ LC_ALL=C ksh93 -c 'printf "%(%c)T\n" "30-Aug-2015 Saturday"' Sat Sep 5 00:00:00 2015 

    Обратите внимание, что если дата – суббота, то она вернется в тот же день, если вы захотите в следующую субботу, сделайте это:

     LC_ALL=C printf "%(%c)T\n" "30-Aug-2015 tomorrow Saturday" 

    Замените %c параметром strftime вы хотите:

     $ LC_ALL=C printf "%(%d-%b-%Y)T\n" "03-Jan-2015 tomorrow saturday" 10-Jan-2015 

    date GNU:

     $ d=03-JAN-2015 $ LC_ALL=C date -d "$d +1 week -$(date -d "$d +1 day" +%w) day" '+%d-%^b-%Y' 10-JAN-2015 

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

     # Assume that date1 is already set to "30-AUG-2015" try_date="$date1" while [ "$(date --date="$try_date" +"%A")" != Saturday ] do try_date=$(date --date="$try_date + 1 day" +"%d-%b-%Y") done date2="$try_date" echo "$date2" 

    Вывод:

     05-Sep-2015 

    Вы можете изменить линию while на

    • while [ "$(date --date="$try_date" +"%a")" != Sat ]
      или
    • while [ "$(date --date="$try_date" +"%5")" != 6 ]
      (используйте 1 для понедельника … 7 для воскресенья)

    Если $date1 – «29 августа-2015» (это суббота), тогда $date2 будет «29 августа-2015» (т.е. в тот же день). Если вы все еще хотите получить 05-сентябрь-2015 для этого ввода (т. $date1 следующую субботу после $date1 ), измените первую строку на try_date=$(date --date="$date1 + 1 day" +"%d-%b-%Y") .

    Если вы действительно хотите месяц во всех столицах (например, «SEP»), используйте tr .

    Interesting Posts

    Каковы последствия перехода на огромное ядро ​​памяти на RHEL4

    Прокрутка по очень длинным файлам (1M + lines) на Emacs

    Есть ли какая-либо программа для обеспечения согласованного интерфейса для нескольких типов архивов?

    Бит Setuid, похоже, не влияет на bash

    Какой getty я должен использовать для / dev / tty1 – текстовых консолей tty6 в linux, agetty или что-то еще

    Разница между местным временем и часами

    Разница в производительности между командой, которая делает то же самое

    Создание CMake применимо к -DCMAKE_INSTALL_PREFIX ко всему

    Моноширинные шрифты Google Chrome трудно читать

    Как определить, является ли сетевой интерфейс физическим (устройством) или виртуальным (псевдоним)?

    Заполнение вкладки, когда `patch` запрашивает имя файла

    захват и сравнение заголовков пакетов iptables

    mmap / dev / random

    Почему / var / log / wtmp становится настолько огромным? Как проверить файлы wtmp?

    Вставка переменных в команду в сценарии оболочки

    Linux и Unix - лучшая ОС в мире.