epoch time para GMT

2

Em AIX

date -u fornece a data e a hora no formato GMT
date fornece a data e a hora no fuso horário local
date +%s fornece a hora local na época da epoca

Existe uma maneira de obter o horário GMT no formato de época?

No AIX que estou usando, existem apenas as opções -n e -u disponíveis (portanto, não posso usar a opção -f).

Meu objetivo é calcular o deslocamento em horas entre o horário local e o GMT.

Eu posso analisar $TZ environment variable , que pode ser entediante. Em vez disso, divida a diferença de horário da época entre dois fusos horários por 60, aproximadamente, deve me dar a resposta.

    
por sandeep 06.07.2015 / 13:17

3 respostas

3

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 ))
    
por 06.07.2015 / 14:43
1

Se o seu objetivo é calcular a diferença de horas entre a UTC / GMT e a hora local, basta perguntar da seguinte forma:

UTC=$(date -u +%H)
LT=$(date +%H)
DIFF=$((UTC - LT))

tomando cuidado para observar que o resultado pode ser negativo dependendo da hora do dia e localizações relativas.

    
por 06.07.2015 / 15:30
1

Se o seu AIX tiver pelo menos Perl 5.9, você pode usar o módulo principal Time :: Piece para obter o deslocamento do fuso horário em segundos:

perl -MTime::Piece -le '$t=Time::Piece->new;print $t->tzoffset'

Para um fuso horário específico, faça:

TZ = Austrália / Darwin perl -MTime :: Pedaço -le '$ t = Tempo :: Pedaço- > novo; imprima $ t- > tzoffset'

    
por 06.07.2015 / 15:35