UTC vs. localtime tem um deslocamento de cerca de 25 segundos

4

Eu comparei isso em sistemas diferentes, mas só obtenho esse comportamento em um sistema embarcado rodando o Arago linux. Eu uso o comando date do BusyBox v.1.13.2

Eu executei estes dois comandos "simultaneamente":

[root@host:~] date; date -u
Fri Mar 18 12:56:49 CET 2016
Fri Mar 18 11:57:14 UTC 2016

A saída do zdump é a esperada (+3600 segundos; +1 hora):

/etc/localtime  Sun Mar 29 01:00:24 2015 UT = Sun Mar 29 01:59:59 2015 CET isdst=0 gmtoff=3600
/etc/localtime  Sun Mar 29 01:00:25 2015 UT = Sun Mar 29 03:00:00 2015 CEST isdst=1 gmtoff=7200
/etc/localtime  Sun Oct 25 01:00:24 2015 UT = Sun Oct 25 02:59:59 2015 CEST isdst=1 gmtoff=7200
/etc/localtime  Sun Oct 25 01:00:25 2015 UT = Sun Oct 25 02:00:00 2015 CET isdst=0 gmtoff=3600
/etc/localtime  Sun Mar 27 01:00:24 2016 UT = Sun Mar 27 01:59:59 2016 CET isdst=0 gmtoff=3600
/etc/localtime  Sun Mar 27 01:00:25 2016 UT = Sun Mar 27 03:00:00 2016 CEST isdst=1 gmtoff=7200
/etc/localtime  Sun Oct 30 01:00:24 2016 UT = Sun Oct 30 02:59:59 2016 CEST isdst=1 gmtoff=7200
/etc/localtime  Sun Oct 30 01:00:25 2016 UT = Sun Oct 30 02:00:00 2016 CET isdst=0 gmtoff=3600
/etc/localtime  Sun Mar 26 01:00:24 2017 UT = Sun Mar 26 01:59:59 2017 CET isdst=0 gmtoff=3600
/etc/localtime  Sun Mar 26 01:00:25 2017 UT = Sun Mar 26 03:00:00 2017 CEST isdst=1 gmtoff=7200

De onde vem esse deslocamento de 25 segundos?

    
por marc 15.03.2016 / 19:08

3 respostas

2

Seguindo o strace do primeiro comando ( date ):

open("/etc/localtime", O_RDONLY)

It access the timezone file pointed by /etc/localtime which is /usr/share/zoneinfo/europe/Zurich in my case. So everything fine so far.


O strace do segundo comando ( date -u ) me deu dicas de por que ele não estava funcionando corretamente:

open("/usr/share/zoneinfo/UTC0", O_RDONLY)

There wasn't such a file in the zoneinfo directory, so I had to copy UTC to UTC0 and now everything works as expected.


date; date-u
Fri Apr 26 09:52:44 CET 2016
Fri Apr 26 07:52:44 UTC 2016
    
por 26.04.2016 / 09:54
2

25 segundos foi a diferença entre as zonas tz compatíveis com POSIX e as zonas tz "certas" durante o intervalo de 2012-07-01 até 2015-07-01. Se o tzdata for o antigo e se o fuso horário padrão para o shell que executa este comando for um POSIX CET e o fuso horário "-u" for uma versão "certa" do UTC, o código "direito" assumirá que o relógio do sistema violou POSIX contando todos os segundos bissextos, então o código "certo" irá subtrair esses 25 segundos como parte da conversão do clock do sistema para a hora civil.

    
por 26.04.2016 / 18:40
0

A diferença entre 04:05:12 CET e 1457838339 módulo 86400 é o fuso horário. Se você estiver obtendo um deslocamento de 27 segundos, isso significa que há algo errado em sua definição de fuso horário e acaba especificando um deslocamento de 27 segundos em vez da suposta 1 hora (presumivelmente). Verifique sua configuração de fuso horário, começando com a variável TZ . O Arago Linux usa o Glibc, que tem várias opções para especificar fusos horários mas normalmente usa arquivos de fuso horário do banco de dados de fuso horário padrão (portanto, TZ deve ser CET ou melhor algo como Europe/Paris para obedecer às regras locais de DST e acompanhar a evolução histórica ou TZ não deve usar /etc/localtime ) . Você pode usar zdump -v para obter a descrição de um fuso horário.

    
por 16.03.2016 / 02:15