преобразовать часовой пояс строки временной метки в bash

преобразовать часовой пояс строки временной метки в bash

У меня есть строка даты/времени, которая извлекается из имени файла. Я знаю, что временная метка была записана с использованием часового пояса A, и мне нужно преобразовать ее в часовой пояс B для дальнейшей обработки. Возможно ли это в bash?

например:

filenameTimestamp="2015-01-20 18:05:02"
timezoneA="Australia/Sydney"
timezoneB="Australia/Brisbane"

Я предполагаю, что мне придется проанализировать строку, используя часовой пояс A, а затем снова вывести ее в строку, используя часовой пояс B.

решение1

Чтобы перевести дату в Сиднее в дату в Лос-Анджелесе, США:

$ sec=$(TZ="Australia/Sydney" date +'%s' -d "2015-05-20 18:05:02")
$ TZ="America/Los_Angeles" date -d "@$sec"
Wed May 20 01:05:02 PDT 2015

Вот результат для Брисбена:

$ TZ="Australia/Brisbane" date -d "@$sec"
Wed May 20 18:05:02 AEST 2015

Как это работает

  • TZ="Australia/Sydney" date +'%s' -d "2015-05-20 18:05:02"

    Это временно установит часовой пояс Сиднея и преобразует дату «2015-05-20 18:05:02» во время в секундах с начала эпохи (UTC).

  • sec=$(TZ="Australia/Sydney" date +'%s' -d "2015-05-20 18:05:02")

    Это сохраняет время в секундах с начала эпохи (UTC) в переменной оболочки sec.

  • TZ="America/Los_Angeles" date -d "@$sec"

    Это временно устанавливает часовой пояс Лос-Анджелеса и интерпретирует дату, указанную sec.

Связанный контент