Преобразование даты с часовым поясом в метку времени UNIX Shell / Bash - PullRequest
2 голосов
/ 20 апреля 2019

Мне нужно преобразовать дату из строки в формате «гггг / мм / дд чч: мм: сс TZ» во время UNIX (TZ = часовой пояс).

То, что я до сих пор делал, - этопреобразовать дату в формате "гггг / мм / дд чч: мм: сс" без часового пояса в метку времени, используя

dateYMD="2019/2/28 12:23:11.46"
newt=$(date -d "${dateYMD}" +"%s")
echo ${newt}

, и у меня получится следующий результат.

1551349391

Я пытаюсь найти способ преобразования часового пояса и даты / времени в метку времени (время Unix).Например, мне нужно 4 переменные с той же датой / временем, что и dateYMD, но в 4 разных часовых поясах, чтобы их временные метки были разными.

Вот последнее, что я пробовал

dateYMD="2017/09/09 08:58:09"
timez=$(TZ=Australia/Sydney date -d @$(date +%s -d "${dateYMD}"))
unixTimez=$( date --date "${timez}" +"%s" )
echo ${unixTimez}

показал мне следующую ошибку

   date: invalid date ‘чт фев 28 21:23:11 AEDT 2019’

Ответы [ 2 ]

4 голосов
/ 20 апреля 2019

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

timesydney=$(TZ=Australia/Sydney date -d "$dateYMD" +%s)
timenyc=$(TZ=US/Eastern date -d "$dateYMD" +%s)
1 голос
/ 20 апреля 2019

Либо вы делаете это, устанавливая переменную окружения TZ= (см. Ответ Barmar), либо вы включаете часовой пояс в строку времени. Это имеет более высокий приоритет, чем TZ =.

Примеры:

TZ=UTC date -d '2019-01-01 12:00 CET' +'%s, %F %T %Z %z'
TZ=CET date -d '2019-01-01 12:00 CET' +'%s, %F %T %Z %z'
TZ=UTC date -d '2019-01-01 12:00 PDT' +'%s, %F %T %Z %z'
TZ=CET date -d '2019-01-01 12:00 PDT' +'%s, %F %T %Z %z'
TZ=UTC date -d '2019-01-01 12:00 +500' +'%s, %F %T %Z %z'

напечатает

1546340400, 2019-01-01 11:00:00 UTC +0000
1546340400, 2019-01-01 12:00:00 CET +0100
1546369200, 2019-01-01 19:00:00 UTC +0000
1546369200, 2019-01-01 20:00:00 CET +0100
1546326000, 2019-01-01 07:00:00 UTC +0000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...