Não existe algo como "horário local no formato de época", date +%s
sempre imprime o número de segundos desde a época, ou seja, desde 1970-01-01 UTC. É o mesmo número em todos os fusos horários.
No entanto, com a maioria das strftime(3)
implementations date +%z
imprimirá o deslocamento numérico do fuso horário especificado:
$ TZ=Australia/Darwin date +%z
+0930
$ TZ=America/Toronto date +%z
-0400
Isso funciona com o GNU date
e com o BSD date
. Eu não tenho ideia sobre o AIX.
Supondo que funcione, você pode calcular o deslocamento em segundos de qualquer fuso horário. Com bash
:
#! /bin/bash
offset="$(TZ="$1" date +%z)"
sign=${offset:0:1}1
hours=${offset:1:2}
minutes=${offset:3:2}
if [ x"${hours:0:1}" = x0 ]; then hours="${hours:1}"; fi
if [ x"${minutes:0:1}" = x0 ]; then minutes="${minutes:1}"; fi
printf 'offset of TZ=%s: %d\n' "$1" $(( sign * 3600 * hours + 60 * minutes ))