Получить дату (за день до текущего времени) в Баш

Получить дату (за день до текущего времени) в Баш

10.11.2009 01:12:23 Просмотров 27 Источник

Как я могу напечатать дату, которая на день раньше текущего времени в Баш?

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash#comment1587684_1706882
Пробовал дату, но похоже, что в Solaris 10 нет переключателя-d
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash#comment3309691_1706882
Я нашел еще одно отличное решение, установив gnu date (coreutil package) из sunfreeware.
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash#comment18403099_1706882
Ни -д-выключатель в дата по экс
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash#comment67532976_1706882
Видишь stackoverflow.com/q/15374752/462865 для DST-безопасной версии этого вопроса.

Ответы - Получить дату (за день до текущего времени) в Баш / Get the date (a day before current time) in Bash

ghostdog74

10.11.2009 01:17:09

если у вас есть дата GNU и я вас правильно понял

$ date +%Y:%m:%d -d "yesterday"
2009:11:09

или

$ date +%Y:%m:%d -d "1 day ago"
2009:11:09
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash/1706909#comment1590392_1706909
Я нашел большинство из них, как предложил ответ, но переключатель-d не найден в дате Solaris
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash/1706909#comment23078158_1706909
Для использования на Ubuntu с функцией даты: $(дата +%Y:%m:%d -d "1 день назад"), выход: 2013:04:21. И если вы хотите дату 10 дней назад, вы можете использовать $(дата +%Y:%m:%d-d "10 дней назад") или $(дата +%Y:%m:%d-d " 10 дней назад")
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash/1706909#comment37047391_1706909
На OS X вы можете установить coreutils через brew: смотрите stackoverflow.com/questions/15374752/…
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash/1706909#comment58963587_1706909
date -v-1dна OSX (минус), -v+1d(плюс)
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash/1706909#comment62053801_1706909
Эта функция bash будет работать как на Linux, так и на OSX. В основном он сначала пробует стиль GNU Linux. Если это не удается, он пробует стиль OSX. Вызовите его с аргументом числа дней в прошлом, которое вы хотите получить. Если вы не передадите ни одного аргумента, то предположим, что 0 дней. Этот код является однострочным, поэтому вырезание и вставка должны работать - никаких окончаний строк не предполагается. date_days_past () { days_past=${1:-0}; if ! date -v-${days_past}d +%Y%m%d 2>/dev/null; then date --date="-${days_past} day" +%Y%m%d; fi }
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash/1706909#comment100862622_1706909
Для Solaris используйте одноразовый часовой пояс bash $(TZ=America/New_York date +%Y-%m-%d)
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash/1706909#comment102514092_1706909
дата-d "вчера 13: 00 "'+%F ' короче
silent

10.11.2009 01:17:18

date --date='-1 day'
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash/1706911#comment74580420_1706911
Erros на macOS Sierra: date: illegal option -- -
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash/1706911#comment84672307_1706911
Вам нужно установить версию GNU date, доступную через пакет coreutils, чтобы этот синтаксис работал на macOS. Если вы используете Homebrew , вы можете установить его через brew install coreutils, после чего вы сможете использовать GNU date через команду gdate. Смотрите: topbug.net/blog/2013/04/14/…
medoix

10.11.2009 01:18:47

#!/bin/bash
OFFSET=1;
eval `date "+day=%d; month=%m; year=%Y"`
# Subtract offset from day, if it goes below one use 'cal'
# to determine the number of days in the previous month.
day=`expr $day - $OFFSET`
if [ $day -le 0 ] ;then
month=`expr $month - 1`
if [ $month -eq 0 ] ;then
year=`expr $year - 1`
month=12
fi
set `cal $month $year`
xday=${$#}
day=`expr $xday + $day`
fi
echo $year-$month-$day
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash/1706922#comment1583425_1706922
+1 для коррекции, интересный метод, хотя и немного многословный.
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash/1706922#comment11419139_1706922
Привет medoix, я не в состоянии найти значение ${$#}. Я знаю, что $# обозначает количество аргументов для скрипта / функции. Но я не могу к этому относиться. Пожалуйста помочь.
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash/1706922#comment25256691_1706922
Это не работает для дня previus при смене месяца . Например, сегодня 1 July , 2013года, результат распечатывается 2013-6-1347, в то время как ожидаемый результат 2013-6-30
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash/1706922#comment25559018_1706922
Вместо 3 строк между "fi" попробуйте "day= echo $(cal $month $year)|tr ' ' '\n'|tail -n 1"
Heinzi

10.11.2009 01:19:07

yesterday=`date -d "-1 day" %F`

Помещает вчерашнюю дату в формате гггг-ММ-ДД в переменную $yesterday.

Peter Lindqvist

10.11.2009 01:19:58

Advanced Bash-руководство по написанию сценариев

date +%Y:%m:%d -d "yesterday"

Дополнительные сведения о формате даты см. На странице справочника по дате

date --date='-1 day'
DigitalRoss

10.11.2009 01:19:59

date --date='-1 day'

Vijay

10.11.2009 01:50:05

date +%Y:%m:%d|awk -vFS=":" -vOFS=":" '{$3=$3-1;print}'
2009:11:9
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash/1707079#comment1588550_1707079
А если сегодня 1 января?
martin clayton

11.11.2009 01:24:21

Может быть, использовать Perl вместо этого?

perl -e 'print scalar localtime( time - 86400 ) . "\n";'

Или используйте nawk и (ab)use /usr / bin / adb:

nawk 'BEGIN{printf "0t%d=Y\n", srand()-86400}' | adb

Наткнулся и на это ... безумие!

/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= '/^time\(\)/ {gsub(/ /,"",$2);printf "0t%d=Y\n", $2-86400}' | adb
Является ответом!
conandor

11.11.2009 05:16:44

Извините, что не упомянул я в системе Солярис. Таким образом, переключатель-date недоступен на Solaris bash.

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

DATE=`TZ=MYT+16 date +%Y-%m-%d_%r`
echo $DATE
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash/1712584#comment10046419_1712584
Этот метод не является 100% надежным (около 98% на самом деле), если вы живете в месте, использующем летнее время.
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash/1712584#comment100862637_1712584
Не совсем, Вы можете использовать bash $(TZ=America/New_York date +%Y-%m-%d)
Jacob Persson

15.12.2011 06:34:36

Если у вас есть дата BSD (OSX)date

Или если вы хотите сделать вычисления даты на произвольную дату:

date -j -v-1d
Wed Dec 14 15:34:14 CET 2011
alpana

04.06.2013 01:02:34

Ну, это поздний ответ, но это, кажется, работает!!

     YESTERDAY=`TZ=GMT+24 date +%d-%m-%Y`;
     echo $YESTERDAY;
misguided

02.07.2013 03:56:12

Попробуйте приведенный ниже код, который также заботится о части DST.

if [ $(date +%w) -eq $(date -u +%w) ]; then
  tz=$(( 10#$gmthour - 10#$localhour ))
else
  tz=$(( 24 - 10#$gmthour + 10#$localhour ))
fi
echo $tz
myTime=`TZ=GMT+$tz date +'%Y%m%d'`

Courtsey Ансгар Wiechers

Walter A

12.03.2014 04:50:58

Решение с учетом DST:

Манипулирование часовым поясом возможно для смены часов на несколько часов. В связи с переходом на летнее время, 24 часа назад может быть сегодня или позавчера.

Вы уверены, что вчера было 20 или 30 часов назад. Какой именно? Ну, самый последний, который не сегодня.

echo -e "$(TZ=GMT+30 date +%Y-%m-%d)\n$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1

Параметр-e, используемый в команде echo, необходим для bash, но не будет работать с ksh. В ksh вы можете использовать ту же команду без флага-e.

Когда ваш скрипт будет использоваться в разных средах, вы можете запустить скрипт с #!/ bin/ksh или #!/ бин / Баш. Вы также можете заменить \n новой строкой:

echo "$(TZ=GMT+30 date +%Y-%m-%d)
$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1
Maverick

18.08.2017 10:05:02

MAC OSX

За вчерашний день:

date -v-1d +%F

где 1d определяет текущий день минус 1 день. Аналогично,

дата-v-1w +%F-для даты предыдущей недели

дата-v-1m +%F-для даты предыдущего месяца

ЕСЛИ У ВАС ЕСТЬ ДАТА GNU,

date --date="1 day ago"

Дополнительная информация: https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html

trox

19.03.2018 06:12:39

Не очень сексуально, но может сделать свою работу.:

perl -e 'my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time - 86400);$year += 1900; $mon+= 1; printf ("YESTERDAY: %04d%02d%02d \n", $year, $mon, $mday)'

Составлено из ответа "Мартин Клейтон".

Sven

14.06.2019 08:06:49

Вы можете сделать простой расчет, скомпонованный с регулярным выражением, если выбран формат даты "YYYYMM":

echo $(($(date +"%Y%m") - 1)) | sed -e 's/99$/12/'

В январе 2020 года он вернется 201912 ;-) Но, это только обходной путь, когда дата не имеет вариантов расчета и другие параметры dateinterpreter (например, с помощью perl) не доступны ;-)

suresh Palemoni

19.01.2020 04:24:00

date -d "yesterday" '+%Y-%m-%d'

или

date=$(date -d "yesterday" '+%Y-%m-%d')
echo $date
https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash/59810421#comment105763045_59810421
Это приводит к date: illegal option: -dна Solaris. Ваш ответ, который опирается на непереносимые расширения GNU к утилите POSIX-standard date для вопроса о платформе Solaris, отличной от GNU.
Закрыть X