получение предыдущей даты в bash / unix
Я ищу, чтобы получить предыдущую дату в 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]







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

16.04.2013 06:31:14
Проблема
Вы используете для своих аргументов обратные кавычки, а не одиночные кавычки. Вы также можете не использовать GNU date или версию date, которая поддерживает используемый вами флаг.
Решение
Правильно цитируйте свои аргументы. Например:
$ date -d '1 day ago' +'%Y/%m/%d'
2013/04/14

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
(Слегка адаптировано, если сравнивать с тем, что стоит за ссылкой.)

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
Я надеюсь, что это полезно для людей, которые сталкиваются с той же проблемой, что и я.












TZ=GMT+14 date +’%Y/%m/%d’
.




TZ=$TZ+24 date +’%Y/%m/%d’

TZ=$TZ+14 date +’%Y/%m/%d’
для меня?



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

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

19.02.2015 08:36:41
$ date '+%m/%d/%Y' --- current date
$ TZ=Etc/GMT+24 date '+%m/%d/%Y' -- one dayprevious date
Использование часовом поясе, соответственно

16.03.2015 07:29:37
Вы можете использовать
date -d "30 days ago" +"%d/%m/%Y"
чтобы получить дату от 30 дней назад, аналогично вы можете заменить 30 на x количество дней

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

