
Tengo una cadena de fecha/hora que se extrae de un nombre de archivo. Sé que la marca de tiempo se escribió utilizando la zona horaria A y necesito convertirla a la zona horaria B para su posterior procesamiento. ¿Es esto posible en bash?
p.ej:
filenameTimestamp="2015-01-20 18:05:02"
timezoneA="Australia/Sydney"
timezoneB="Australia/Brisbane"
Supongo que tendré que analizar la cadena usando la zona horaria A y luego enviarla nuevamente a una cadena usando la zona horaria B.
Respuesta1
Para interpretar la fecha de Sydney como una fecha de Los Ángeles, EE. UU.:
$ 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
Aquí está el resultado para Brisbane:
$ TZ="Australia/Brisbane" date -d "@$sec"
Wed May 20 18:05:02 AEST 2015
Cómo funciona
TZ="Australia/Sydney" date +'%s' -d "2015-05-20 18:05:02"
Esto establece temporalmente la zona horaria en Sydney y convierte la fecha "2015-05-20 18:05:02" a la hora en segundos desde la época (UTC).
sec=$(TZ="Australia/Sydney" date +'%s' -d "2015-05-20 18:05:02")
Esto guarda el tiempo en segundos desde la época (UTC) en la variable de shell
sec
.TZ="America/Los_Angeles" date -d "@$sec"
Esto establece temporalmente la zona horaria en Los Ángeles e interpreta la fecha proporcionada por
sec
.