Как получить информацию ГОД из простой строки даты (ГГГГММДД) с помощью SHELL SCRIPT? - PullRequest
0 голосов
/ 20 ноября 2018

Когда я запускаю эту команду, чтобы получить информацию о году от даты ' 20181102 ' (формат: ГГГГММДД ), она отлично работает:

$ echo $(date --date="20181102" +"%Y")
2018

Но когдаЯ пытаюсь с этой другой датой ' 20181104 ', я получил ошибку:

$ echo $(date --date="20181104" +"%Y")
date: invalid date ‘20181104’

Это какая-то ошибка?Или я что-то не так сделал?

1 Ответ

0 голосов
/ 20 ноября 2018
Утилита

GNU date немного грубая и продолжает неправильно понимать входную строку.Для правильной оценки старайтесь всегда указывать date даты в @ секундах с начала эпохи или в одной форме, как в man date вроде "2004-02-29 16:21:42".(Если у вас дата freebsd с опцией -f.)

str=20181102
date --date="$(echo "$str" | cut -c 1-4)-$(echo "$str" | cut -c 5,6)-$(echo "$str" | cut -c 7,8) 00:00:00" +%Y

Но на самом деле, если вы знаете, что первые 4 символа - это год, почему бы вам просто не получить первые 4символы?

str=20181102
echo "$str" | cut -c 1-4

Также обратите внимание, что делать echo $(date ...) бессмысленно.Это просто date ....echo ни в коем случае не нужен.

...