конвертировать строку даты с часами и минутами в секунды в bash - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть пример строки, которая содержит формат ГГГГММДДЧЧММ.Я пытаюсь преобразовать его в секунды, но получаю ошибку ниже.

[vagrant@CentOS-Seven ~]$ export SAMPLE_DATE=201812051147
[vagrant@CentOS-Seven ~]$ echo $SAMPLE_DATE
201812051147
[vagrant@CentOS-Seven ~]$ date -d $SAMPLE_DATE
date: invalid date ‘201812051147’
[vagrant@CentOS-Seven ~]$

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Достаточно разделить части даты и времени пробелом, поэтому:

$ echo 201812051147 | 
  sed -E 's/(.{8})(.{4})/\1 \2/' | 
  date -f - +"%s"

Вывод:

1544003220
0 голосов
/ 05 декабря 2018

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

touch -t 201812051147 tmpfile ; date -r tmpfile +%s ; rm -f tmpfile
0 голосов
/ 05 декабря 2018

Согласно этот ответ date не имеет возможности указать формат ввода.Поэтому вы должны преобразовать свои данные в формат, который принимается date.Команда sed в следующей команде преобразует 201812051147 в 2018-12-05 11:47.
Чтобы преобразовать дату в секунды, используйте выходной формат +%s.

$ input=201812051147
$ date -d "$(sed -E 's/(....)(..)(..)(..)(..)/\1-\2-\3 \4:\5/' <<< "$input")" +%s
1544010420

Обратите внимание, что вывод зависит от часового пояса вашей системы.Вы можете изменить часовой пояс, установив переменную среды TZ.

Кстати: в этом случае вам не нужно экспортировать переменную.Кроме того, для именования переменных в bash принято использовать строчные буквы.По договоренности только специальные переменные пишутся во всех заглавных буквах.Использование имен переменных, написанных заглавными буквами, может привести к конфликту имен с этими переменными.

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