
У меня есть строка даты/времени, которая извлекается из имени файла. Я знаю, что временная метка была записана с использованием часового пояса 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
.