получение предыдущей даты в bash / unix


получение предыдущей даты в bash / unix

16.04.2013 06:28:26 Просмотров 124 Источник

Я ищу, чтобы получить предыдущую дату в Unix / shell script .

Я использую следующий код

date -d ’1 day ago’ +’%Y/%m/%d’

Но я получаю следующую ошибку.

date: illegal option -- d

Насколько я читал в inetrnet, это в основном означает, что я использую более старую версию GNU. Может кто-нибудь, пожалуйста, помочь с этим.

дальнейшая информация

unix> uname -a

SunOS Server 5.10 Generic_147440-19 sun4v sparc SUNW,Sun-Fire-T200

Также приведенная ниже команда выдает ошибку.

unix> date --version

date: illegal option -- version
usage:  date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]
У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix#comment22863726_16027776
+1 к shellter, альтернативой является date-h и / или man date, чтобы увидеть, поддерживает ли ваша система опцию-D.
https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix#comment22864077_16027776
@misguided: у вас была правильная идея. Вероятно, у вас его нет, поэтому, как упоминали другие, вам нужно будет использовать другой вариант или решение в целом.

Ответы - получение предыдущей даты в bash / unix / getting a previous date in bash/unix

Todd A. Jacobs

16.04.2013 06:31:14

Проблема

Вы используете для своих аргументов обратные кавычки, а не одиночные кавычки. Вы также можете не использовать GNU date или версию date, которая поддерживает используемый вами флаг.

Решение

Правильно цитируйте свои аргументы. Например:

$ date -d '1 day ago' +'%Y/%m/%d'
2013/04/14
tripleee

16.04.2013 07:40:38

SunOS поставляется с устаревшими инструментами BSD userland, которые часто не имеют ожидаемых современных опций. Посмотрите, сможете ли вы получить дополнение XPG (это что-то вроде /usr/xpg4/bin/date) или установить пакет GNU coreutils, если сможете.

А пока вам, возможно, придется написать свой собственный простой сценарий обработки дат. Есть много примеров в сети, например, в Perl. Например, этот:

vnix$ perl -MPOSIX=strftime -le 'print strftime("%Y%m", localtime(time-86400))'
201304

(Слегка адаптировано, если сравнивать с тем, что стоит за ссылкой.)

misguided

16.04.2013 07:46:15

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

timeA=$(date +%Y%m)
sysD=$(date +%d)
print "Initial sysD $sysD">>LogPrint.log
sysD=$((sysD-1))
print "Final sysD $sysD">>LogPrint.log
finalTime=$timeA$sysD

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

https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/16028421#comment22865782_16028421
Конечно, в январе 201401 минус один - это 201400, а не 201312.
https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/16028421#comment22866347_16028421
@tripleee согласен, что это не надежный обходной путь.Но в данный момент я не могу найти никаких других решений :(. Я все еще ищу лучший ответ.
kumarprd

16.04.2013 07:50:11

попробовать это:

date --date="yesterday" +%Y/%m/%d
https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/16028457#comment22876295_16028457
Я использую это в своем сценарии оболочки и прекрасно работаю для меня во всех моих оболочках. Вы проверяли его ??
https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/16028457#comment22879872_16028457
Тогда код вопроса также сработает для вас, и вы не на Суносе.
https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/16028457#comment22944020_16028457
Да, это тоже сработало. Я не использую SunOS, вот почему я попросил попробовать.
https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/16028457#comment94740626_16028457
Это сработало для меня в Solaris 11.3, но с использованием "gdate" вместо "date".
https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/16028457#comment102508965_16028457
поисковые системы посылают нас сюда, чтобы спросить, как найти вчерашнюю дату в linux. @tripleee пожалуйста, укажите "SunOS" в вашем вопросе, потому что ваш вариант использования не относится к generic bash/linux, где это, кажется, работает просто отлично.
https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/16028457#comment102509357_16028457
@NikhilVJ не мой вопрос, и вы должны быть в состоянии предложить редактирование тегов самостоятельно. Но вопрос уже обозначен Солярисом . Поведение dateне зависит от вашей оболочки (Bash) или операционной системы (Linux), а только date).
https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/16028457#comment102509753_16028457
Ой, извините :П
Является ответом!
devnull

16.04.2013 08:58:03

Несколько предложенных здесь решений предполагают GNU coreutils

https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/16029087#comment22867327_16029087
блестящий ответ. работать отлично. Единственный вопрос , который у меня есть, является ли это специфичным для любого часового пояса? Я живу в МСК+10 часовой пояс, это я должна upadte соответственно qury?
https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/16029087#comment22867851_16029087
Если ваш часовой пояс GMT+10, используйте TZ=GMT+14 date +’%Y/%m/%d’.
https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/16029087#comment22870401_16029087
... Что опять же делает этот ответ непригодным для портативного решения; но если он работает для вас, то, возможно, самый простой.
https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/16029087#comment22870635_16029087
@devnull спасибо. Просто хочу понять логику, если это GMT +10, Почему я использую GMT+14 в уравнении?
https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/16029087#comment22871103_16029087
Потому что 10+14=24. Подумайте, что произойдет, если запустить его в 01:00 по местному времени и просто слепо использовать GMT+24. (Или я сейчас неправильно считаю? Если я ошибся, считайте 23:00 вместо этого :-)
https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/16029087#comment22871443_16029087
Другой вариант-сказать: TZ=$TZ+24 date +’%Y/%m/%d’
https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/16029087#comment22873995_16029087
Я предполагаю, что это снова будет TZ=$TZ+14 date +’%Y/%m/%d’для меня?
https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/16029087#comment22875915_16029087
Это не зависит от часового пояса?
https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/16029087#comment31836212_16029087
Этот подход $TZ+24 не работает так, как предполагалось: возвращенная дата действительно 24 часа в прошлом, но она находится в GMT, что может быть неправильной датой. Еще более странно, если ваш TZ-это что-то вроде America/Los_Angeles или US/Pacific.
user3568717

24.04.2014 04:03:56

Для того, чтобы получить 1 день назад дату с помощью команды date:

date -v -1dон даст (текущая дата -1) означает 1 день до этого .

date -v +1d Это даст (текущая дата +1) означает 1 день после.

Аналогично ниже написанный код может быть использован вместо d, чтобы узнать год, месяц и т. д

y-Year, m-Month w-Week d-Day H-Hour M-Minute
S-Second

Ravi Babu Mathi

11.09.2014 01:06:41

следующий сценарий выводит предыдущую дату в targetDate(указанную дату или заданную дату)

targetDate=2014-06-30
count=1
startDate=$( echo `date -d "${targetDate} -${count} days" +"%Y-%m-%d"`)
echo $startDate
akash malbari

19.02.2015 08:36:41

$ date '+%m/%d/%Y' --- current date


$ TZ=Etc/GMT+24 date  '+%m/%d/%Y'  -- one dayprevious date

Использование часовом поясе, соответственно

Dan Pickard

16.03.2015 07:29:37

Вы можете использовать

date -d "30 days ago" +"%d/%m/%Y"

чтобы получить дату от 30 дней назад, аналогично вы можете заменить 30 на x количество дней

Vladislav Ross

30.06.2015 08:44:33

dtd="2015-06-19"
yesterday=$( date -d "${dtd} -1 days" +'%Y_%m_%d' )
echo $yesterday;
venki

19.10.2017 08:51:40

попробовать это: gdate-d "1 день назад" + " %Y/%m/%d"

suresh Palemoni

19.01.2020 04:21:28

date -d "yesterday" '+%Y-%m-%d'
https://stackoverflow.com/questions/16027776/getting-a-previous-date-in-bash-unix/59810402#comment105765355_59810402
Пожалуйста, добавьте объяснение, чтобы объяснить, что это делает.
Помочь в развитии проекта:
Закрыть X