O que mais, além de / etc / localtime e $ TZ, afeta 'data'?

6

Eu tenho uma instalação do fedora 20 com o relógio configurado para UTC e nenhuma variável de ambiente TZ . Por que o comando date está exibindo a data no fuso horário CET (que, a propósito, é o fuso horário local)?

[fedora@slave2 ~]$ ls -l /etc/localtime
lrwxrwxrwx. 1 root root 27 Apr  8  2014 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC
[fedora@slave2 ~]$ echo $TZ

[fedora@slave2 ~]$ env | grep TZ
[fedora@slave2 ~]$ date
Wed Mar 18 17:20:44 CET 2015

Além disso, pedir a hora em um pequeno programa java mostra a hora em UTC (enquanto que se eu definir o ambiente TZ como CET, em seguida, a saída será a data em CET):

[fedora@slave2 ~]$ java DateDemo
Wed Mar 18 16:24:17 UTC 2015
[fedora@slave2 ~]$ TZ=CET java DateDemo
Wed Mar 18 17:24:24 CET 2015

(recebi o código DateDemo java do link )

Informação adicional:

[fedora@slave2 ~]$ type date
date is hashed (/usr/bin/date)
[fedora@slave2 ~]$ set +h
[fedora@slave2 ~]$ type date
date is /usr/bin/date
[fedora@slave2 ~]$ date
Wed Mar 18 17:58:26 CET 2015
[fedora@slave2 ~]$ strace -fe open date
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
Wed Mar 18 18:02:41 CET 2015
+++ exited with 0 +++

zdump:

[fedora@slave2 ~]$ zdump -v /etc/localtime | head
/etc/localtime  -9223372036854775808 = NULL
/etc/localtime  -9223372036854689408 = NULL
/etc/localtime  Mon Dec 31 23:53:55 1900 UTC = Mon Dec 31 23:59:59 1900 LMT isdst=0 gmtoff=364
/etc/localtime  Mon Dec 31 23:53:56 1900 UTC = Mon Dec 31 23:53:56 1900 WET isdst=0 gmtoff=0
/etc/localtime  Sun Sep 29 23:59:59 1946 UTC = Sun Sep 29 23:59:59 1946 WET isdst=0 gmtoff=0
/etc/localtime  Mon Sep 30 00:00:00 1946 UTC = Mon Sep 30 01:00:00 1946 CET isdst=0 gmtoff=3600
/etc/localtime  Sun Mar 31 00:59:59 1985 UTC = Sun Mar 31 01:59:59 1985 CET isdst=0 gmtoff=3600
/etc/localtime  Sun Mar 31 01:00:00 1985 UTC = Sun Mar 31 03:00:00 1985 CEST isdst=1 gmtoff=7200
/etc/localtime  Sun Sep 29 00:59:59 1985 UTC = Sun Sep 29 02:59:59 1985 CEST isdst=1 gmtoff=7200
/etc/localtime  Sun Sep 29 01:00:00 1985 UTC = Sun Sep 29 02:00:00 1985 CET isdst=0 gmtoff=3600
    
por Carlos Campderrós 18.03.2015 / 17:27

3 respostas

7

O comando date , como quase todos os programas, depende da biblioteca padrão para acessar dados de fuso horário. No Linux (exceto para alguns sistemas embarcados) e * BSD, a biblioteca padrão determina o fuso horário atual do conteúdo de /etc/localtime .

Parece que no seu sistema, /etc/localtime não contém o que parece conter. Como Stéphane Chazelas e derobert , eu strongmente suspeite que o arquivo /usr/share/zoneinfo/Etc/UTC , que /etc/localtime é um link simbólico, contenha informações incorretas, provavelmente porque alguém que não sabia o que estava fazendo tentou alterar o fuso horário do sistema e acabou substituindo um arquivo do sistema.

Recomendo a reinstalação das informações de fuso horário para garantir que seu sistema não esteja corrompido. Execute rpm -qf /usr/share/zoneinfo/Etc/UTC para ver qual pacote contém esse arquivo e reinstale-o com yum reinstall . Em seguida, defina o fuso horário corretamente, seja com o timedatectl command ou alterando o link simbólico /etc/localtime e o arquivo de texto /etc/zoneinfo ou /etc/sysconfig/clock (acho que o Fedora usa o último):

ln -snf /usr/share/zoneinfo/Europe/Madrid /etc/localtime
echo Europe/Madrid >/etc/zoneinfo
sed -i -e '/^ *ZONE=/d' /etc/sysconfig/clock
echo 'ZONE="Europe/Madrid"' >>/etc/sysconfig/clock

O Java faz as coisas de maneira diferente - ignora a biblioteca padrão e lê /etc/timezone ou /etc/sysconfig/clock . É por isso que você está vendo informações de fuso horário diferentes dos programas Java.

    
por 19.03.2015 / 01:48
3

por que você não usa o zdump para ver o que está acontecendo com esse arquivo zoneinfo? Talvez tenha sido realmente substituído, como alguns sugeriram:

# zdump /usr/share/zoneinfo/Etc/UTC
/usr/share/zoneinfo/Etc/UTC  Thu Mar 19 01:14:47 2015 UTC

Se ele exibir o CET, você saberá que alguém substituiu o arquivo.

    
por 19.03.2015 / 02:16
-1
O arquivo

/ etc / sysconfig / clock pode estar tendo um impacto.

    
por 18.03.2015 / 19:41

Tags