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

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

Например

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

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 минутах назад. Наконец, он преобразует значение эпохи в стандартный формат.

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

  • Узнайте точное время установки CentOS
  • Как обрабатывать даты ISO8601 с помощью команды date linux
  • Разница между двумя датами в Linux
  • Добавить число строк и дату в имя файла
  • Как изменить язык для команды даты?
  • Я пытаюсь скомпилировать alsa-driver-RTv5.18, но получить дату-время ошибки для gcc 4.9.2
  • Проверка даты в оболочке
  • hg log timezone форматирование
  • Миллисекундное время в сценарии оболочки
  • Как вести историю команд с временными отметками, выводимыми на терминал непрерывно?
  • вырезать фрагмент файла в зависимости от времени написания строк
  • Interesting Posts

    Сортировка однозначно из строки

    Libvirt управляемое хранилище объемное шифрование тома в «логическом» пуле хранения

    Как установить Kali linux на конкретный (существующий) раздел на USB-накопителе

    Какие каталоги нужны для резервного копирования?

    Загрузите файл iso через uEFI, вызвав исполняемый файл EFI внутри iso

    Вывод Mail cron только тогда, когда Git выдает реальную ошибку

    Как сделать цикл for в командной строке?

    Предоставьте пользователям root права на монтирование разделов NTFS

    Что представляет собой сетевая группа хоста в контексте sudoHost в схеме LDAP Sudoers

    Что такое чистый шрифт sans, поддерживающий UTF-8, который подходит для использования в консоли?

    Как работает вилочная бомба?

    разбиение файла на меньшие файлы с числовым суффиксом

    Как изменить приглашение в Linux?

    Безопасно удалить Ubuntu-минимальный пакет?

    Различные цветовые схемы vim в зависимости от режима

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