Как я могу рассчитать дату, предшествующую данной дате в Unix? - PullRequest
2 голосов
/ 15 сентября 2009

У меня есть две переменные: X и Y.

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

Позвольте мне привести вам пример. Когда X = "091509" ( ммддгг * формат 1014 *) Y должен быть "20090914" ( ггггммдд формат)

Ответы [ 4 ]

5 голосов
/ 15 сентября 2009
~$ date -d "20090101 -1 day"
Wed Dec 31 00:00:00 CET 2008

А если вы хотите получить дату в произвольном формате, просто добавьте несколько строк формата.

~$ date -d "2009-09-15 -1 day" +%Y%m%d
20090914

Что касается конвертации, вы можете использовать извлечение подстроки bash (если, конечно, вы используете bash). Это также предполагает, что ваш ввод является последовательным и «безопасным».

X="091509"
Y=`date -d "${X:4:2}${X:0:2}${X:2:2} -1 day" +%Y%m%d`
echo $Y

См. http://www.walkernews.net/2007/06/03/date-arithmetic-in-linux-shell-scripts/

0 голосов
/ 20 марта 2016

Поскольку опция -d не существует в MacOS X или FreeBSD, вот ответ для них

Получение даты относительно текущего времени

date -v -1d

В частности, для вашего вопроса вам понадобятся флаги -j и -f , чтобы использовать конкретную дату

date -v -1d -j -f %m%d%y 091509 +%Y%m%d
0 голосов
/ 15 сентября 2009

Мне нравится Tcl для арифметики дат, хотя это неуклюже для однострочников оболочки. Использование Tcl 8.5:

x=091509
y=$(printf 'puts [clock format [clock add [clock scan "%s" -format "%%m%%d%%y"] -1 day] -format "%%Y%%m%%d"]' "$x" | tclsh)
0 голосов
/ 15 сентября 2009

дата -d "вчера"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...