Questão Como verificar qual fuso horário no Linux?


Existe uma maneira de verificar em qual fuso horário eu estou atualmente no Linux?


119


origem




Respostas:


Normalmente, o TZ variável de ambiente lhe dirá algo útil. No entanto, é melhor usar funções como mktime() e localtime() converter entre time_t e uma representação de fuso horário local. Isso é, não tente fazer a conversão sozinho.


17



Existe algum comando que diz sobre o fuso horário que o usuário está?
Certo, date vai te dizer. - Greg Hewgill
Eu tenho duas instâncias do servidor, se eu dou "data" comando em ambos os servidores mostra tempo diferente. fuso horário para ambos servidor é IST, hora de um servidor: Mon Jul 11 ​​10:39:31 IST 2011 e outro servidor Mon Jul 11 ​​10:35:31 IST 2011 .. há uma diferença de 4 minutos
No Pangolim Preciso echo $TZ não retorna nada para mim. - Iain Samuel McLean Elder
@GregHewgill sua resposta não é útil na primeira vista. Considere editar sua resposta por favor. Veja a resposta mais votada abaixo. Eu vou downvote sua resposta por agora. Também não há env TZ no padrão em minhas máquinas. - therealmarv


Se você quer dizer a partir do console, basta digitar:

date +%Z

231



bom, funciona bem. - Silver Moon
esta deve ser a resposta aceita - KalenGi
bom ponto ... mudou a resposta para esse efeito - Rasman
E para definir o fuso horário a partir da linha de comando no Ubuntu, o seguinte link fornece o comando trivial de 1 linha para fazer isso: askubuntu.com/a/524362/182454 - Dan Nissenbaum
Isto dá +07 para mim. Para obter Region/City em um Debian / Arch Linux, veja esta resposta. - Tom Hale


Se você quiser o fuso horário numérico:

date +'%:z %Z'

Exemplo de saída:

-05:00 EST

48



No OS X, esta saída :z EST - suspectus
Isto se para linux. - Paul Vargas
Mais precisamente, isso se aplica ao GNU date. A versão do BusyBox imprime algo não sensitivo, "%: z CEST" no meu caso. - Léo Lam
No entanto, data +% z funciona bem no OS X. Sugiro que você modifique a resposta. - Neil Mayhew
Oi, @NeilMayhew Obrigado! Humm ... mas a questão tem as tags linux  ubuntu-10.04 - Paul Vargas


Eu queria encontrar o fuso horário na forma "EUA / Leste" ou "Europa / Londres". Você pode encontrar isto em:

  • / etc / timezone (presente no Ubuntu e no Red Hat? mas não no Amazon Linux)
  • (nos sistemas de estilo Red Hat) como ZONE="US/Eastern" em / etc / sysconfig / clock
  • ou você pode tentar combinar / etc / localtime com um dos arquivos em / usr / share / zoneinfo; irritantemente, isso não parece ser um link simbólico, mas você pode, por exemplo

    cd / usr / share / zoneinfo
      find * -tipo f -exec sh -c "diff -q / etc / localtime" {} '> / dev / null && echo {} "\;

    para encontrar arquivos correspondentes - provavelmente há maneiras melhores de fazer isso, mas isso funciona. Haverá várias correspondências.


22



find /usr/share/zoneinfo/ -type f| xargs md5sum | grep $(md5sum /etc/localtime | cut -d' ' -f1) - freiheit


Para o ubuntu tente isto:

$ cat /etc/timezone

Exemplo de saída:

Asia/Kolkata

Para outra distro Referência: https://unix.stackexchange.com/questions/110522/timezone-setting-in-linux


8



As vezes timedatectl set-timezone não atualiza /etc/timezone. Vejo esta resposta para uma solução baseada em /etc/localtime. - Tom Hale


$ strings /etc/localtime | tail -n 1
MST7MDT,M3.2.0,M11.1.0

Então estou no Mountain Time. Embora os conselhos acima sobre como usar a variável de ambiente ou apenas a saída do comando date funcionem melhor, dependendo de como você deseja usá-lo.


4





Às vezes você pode estar procurando pelo fuso horário canônico ao invés da forma abreviada produzida por date %Z por exemplo. US/Eastern. Em sistemas com timedatectl por exemplo. Fedora, timedatectl gera muitas informações úteis, incluindo a zona atual:

# timedatectl
      Local time: Tue 2016-09-13 17:10:26 EDT
  Universal time: Tue 2016-09-13 21:10:26 UTC
        RTC time: Tue 2016-09-13 21:10:26
       Time zone: US/Eastern (EDT, -0400)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

Infelizmente, timedatectl leva set-timezone como um comando, mas não tem correspondência get-timezone. Analise da seguinte maneira:

# timedatectl status | grep "zone" | sed -e 's/^[ ]*Time zone: \(.*\) (.*)$/\1/g'`
US/Eastern

4





  • O / etc / sysconfig / clock define se o relógio do hardware é armazenado como UTC ou hora local.
  • Symlink / etc / localtime para / usr / share / zoneinfo / ... para definir o seu fuso horário.
  • Tipo /sbin/hwclock --systohc [--utc] para definir o relógio do hardware.

O kernel do Linux sempre armazena e calcula o tempo como o número de segundos desde a meia-noite de 1º de janeiro de 1970, UTC, independentemente de o relógio do seu hardware estar ou não armazenado como UTC. Conversões para seu horário local são feitas em tempo de execução. Uma coisa interessante sobre isso é que, se alguém estiver usando seu computador a partir de um fuso horário diferente, ele poderá definir a variável de ambiente TZ e todas as datas e horas aparecerão corretas para o fuso horário.

Se o número de segundos desde o 1º de janeiro de 1970 UTC estiver armazenado como um inteiro assinado de 32 bits (como está em seu sistema Linux / Intel), seu relógio parará de funcionar no ano 2038. O Linux não possui um problema Y2K inerente , mas tem um problema de ano 2038. Espero que todos nós possamos rodar o Linux em sistemas de 64 bits até lá. Os inteiros de 64 bits manterão nossos relógios funcionando muito bem até aproximadamente o ano 292271 milhões.


2