Как я могу получить относительную дату на основе относительной даты командой linux date?

Могу ли я получить «последний понедельник на основе 10 минут назад» командой linux date?

Например

  • Текущее время: 2016-02-09 00:05:00
  • ожидаемый результат: 2016-02-01 00:00:00

  • Создайте каталог с сегодняшней датой и переместите в него файлы
  • команда оболочки, чтобы знать дату изготовления компьютера
  • Получить первый столбец даты linux
  • Как объединить арифметику bash с выходом команды?
  • Как добавить строку, начинающуюся с STDIN с отметкой времени в эпоху?
  • Как настроить busybox, чтобы пользователь, не являющийся пользователем root, устанавливал дату?
  • Сгенерировать время как выражение 1 / 1000th дня дня
  • Установка старой системной даты
  • 4 Solutions collect form web for “Как я могу получить относительную дату на основе относительной даты командой linux date?”

    Если у вас есть faketime и ваша date динамически связана:

     faketime -f -10m date -d 'last monday' '+%F %T' 

    С ksh93 (только встроенные команды):

     printf '%(%F %T)T\n' "$(printf '%(%Y.%m.%d)T' '10 minutes ago')-0 last monday" 

    Здесь, если это было в прошлое воскресенье, а не в прошлый понедельник , вы могли бы сделать:

     date -d "$(date -d '10 minutes ago' +"%F -%u day")" 

    Или, если это было в прошлую субботу :

     date -d "$(date -d '10 minutes ago' +"%F -%w day -1 day")" 

    Но в прошлый понедельник или в любой другой день недели это связано с некоторой арифметикой:

     eval "date -d \"$(date -d '10 minutes ago' +'%F -$(((%u+5)%%7+1)) day')\"" 

    В противном случае вы всегда можете:

     d=$(date -d 'last monday'); sleep 600; printf '%s\n' "$d" 

    😉

    Вы можете сделать это за 2 сеанса. Вот быстрый скрипт оболочки bash:

     TIME_TEN_MINUTES_AGO=`date -d '-10 min' +%T` LAST_MON=`date -d 'last-monday' +%Y-%m-%d` echo "NOW: " `date "+%Y-%m-%d %T"` echo "Last Mon: " $LAST_MON $TIME_TEN_MINUTES_AGO 

    Это печатает:

     NOW: 2016-02-12 07:54:27 Last Mon: 2016-02-08 07:44:27 

    Не слишком элегантный, но это должно сделать трюк:

     #! /bin/bash export LC_ALL=C # makes sure we're using C locale even in subshells day_10_minutes_ago=$(date -d '-10min' +%a) # stores which weekday it was 10 minutes ago day_now=$(date -d +%a) # stores which weekday it is now if [ $day_10_minutes_ago = "Mon" ]; then # if ten minutes ago it was Monday if [ $day_now = "Mon" ] # if it's still Monday date -d '-1week 00:00' '+%F +%T' # prints the date and the time it was one week ago at 00:00 else # it can only be Tuesday before 00:10:00 AM date -d '-1week-1day 00:00' '+%F +%T' # prints the date and the time it was one week and one day ago at 00:00 fi else # it can only be Tuesday after 00:09:59 AM, Wednesday, Thursday, Friday, Saturday or Sunday date -d 'last-monday 00:00' '+%F +%T' # prints the date and the time it was last Monday at 00:00 fi 

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

     #!/bin/bash DAY=`date --date='-10 min' +"%a"` SEC=`date --date='-10 min' +"%s"` if [[ "$DAY" == "Mon" ]]; then DDIF="7" elif [[ "$DAY" == "Tue" ]]; then DDIF="1" elif [[ "$DAY" == "Wed" ]]; then DDIF="2" elif [[ "$DAY" == "Thu" ]]; then DDIF="3" elif [[ "$DAY" == "Fri" ]]; then DDIF="4" elif [[ "$DAY" == "Sat" ]]; then DDIF="5" elif [[ "$DAY" == "Sun" ]]; then DDIF="6" fi EPOCH=$(awk "BEGIN {print $SEC-(86400*$DDIF); exit}") date -d@"$EPOCH" 

    Что это значит, выясняется, какой день 10 минут назад падает. Выясняется, сколько дней прошло с понедельника. Затем умножается на многие дни на 86400 (количество секунд за один день) и вычитает его из Эпохи, основываясь на 10 минутах назад. Наконец, он преобразует значение эпохи в стандартный формат.

    Как я уже сказал, не обязательно простая, одна строка или элегантная.

    Interesting Posts

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

    Проверка памяти во время загрузки. Не удалось загрузить Ubuntu 12 04 LTS

    Задержка экрана GNU при перемещении курсора на начало / конец строк в Vim

    Изображение dd слишком велико для восстановления

    Как решить проблему ntp «Не удалось связаться с сервером времени» из KDE?

    как избежать необычных / uniq-символов из сценариев ожидания?

    Как автоматически снимать конечные пробелы при сохранении в Vi и Vim?

    Включить ключ блокировки прокрутки

    xv-подобный просмотрщик изображений, который позволяет мне аннотировать / отмечать изображения?

    Почему я получаю правильные результаты и ошибку в этом сценарии bash?

    Переименование файлов с пробелами при сохранении чисел

    Правильное завершение работы компьютера с X сеанса

    Управление музыкой iPhone из командной строки linux

    sed: подписать в строке, которая содержит X, но не содержит Y

    Смонтируйте NTFS-диск с 777 правами доступа

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