Como verificar qual fuso horário no Linux?


Respostas:


19

Geralmente, a TZvariável de ambiente diz algo útil. No entanto, é melhor usar funções como mktime()e localtime()converter entre time_te uma representação de fuso horário local. Ou seja, não tente fazer a conversão você mesmo .


2
existe algum comando que informe sobre o fuso horário em que o usuário está?

26
Claro, datevou te contar.
Greg Hewgill

Eu tenho duas instâncias do servidor, se eu der o comando "date" no servidor, ele mostra uma hora diferente. o fuso horário de ambos os servidores é IST, hora de um servidor: segunda-feira, 11 de julho 10:39:31 IST 2011 e outro servidor segunda-feira, 11 de julho 10:35:31 IST 2011 .. há uma diferença de 4 minutos

8
No Precise Pangolin echo $TZnão retorna nada para mim.
Iain Samuel McLean Elder

3
@GregHewgill, sua resposta não é útil à primeira vista. Considere editar sua resposta, por favor. Veja a resposta mais votada abaixo. Eu vou rebaixar sua resposta por enquanto. Também não há env TZ por padrão em minhas máquinas.
21816 therealmarv

244

Se você quer dizer com o console, digite:

date +%Z

2
bom, funciona bem.
Silver Moon

15
esta deve ser a resposta aceita
KalenGi

bom ponto ... mudou a resposta para esse efeito
Rasman

E para definir o fuso horário na linha de comando no Ubuntu, o link a seguir fornece o comando trivial de 1 linha para fazê-lo: askubuntu.com/a/524362/182454
Dan Nissenbaum 15/16

Isso dá +07para mim. Para entrar Region/Cityem um Linux baseado em Debian / Arch, veja esta resposta .
Tom Hale

54

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

date +'%:z %Z'

Saída de amostra:

-05:00 EST

7
No OS X, essas saídas são :z EST
suspeitas

7
Isso se for para linux .
Paul Vargas

1
Mais precisamente, isso se aplica ao GNU date. A versão do BusyBox imprime algo não sensorial, "%: z CEST" no meu caso.
Léo Lam

No entanto, a data +% z funciona bem no OS X. Sugiro que você modifique a resposta.
Neil Mayhew

1
Olá, @NeilMayhew Obrigado! Humm ... mas a questão tem as tagslinux ubuntu-10.04
Paul Vargas

24

Eu queria encontrar o fuso horário no formato "EUA / Leste" ou "Europa / Londres". Você pode encontrar isso em:

  • / etc / timezone (presente no Ubuntu e Red Hat? mas não no Amazon Linux)
  • (nos sistemas estilo Red Hat) como ZONE="US/Eastern"em / etc / sysconfig / clock
  • ou você pode tentar combinar / etc / localtime a 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
    encontre * -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.


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


6

Às vezes, você pode estar procurando pelo fuso horário canônico, e não pela forma abreviada, produzida por date %Zexemplo US/Eastern. Em sistemas com, timedatectlpor exemplo, o Fedora, timedatectlgera 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, timedatectlleva set-timezonecomo um comando, mas não tem correspondente get-timezone. Analise da seguinte maneira:

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

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

Então, eu estou no tempo da montanha. Embora os conselhos acima sobre o uso de variáveis ​​de ambiente ou apenas a saída do comando date às vezes funcionem melhor, dependendo de como você deseja usá-lo.



2
  • / 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 seu fuso horário.
  • Digite /sbin/hwclock --systohc [--utc]para definir o relógio do hardware.

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

Se o número de segundos desde 1º de janeiro de 1970 UTC for armazenado como um número inteiro de 32 bits assinado (como no sistema Linux / Intel), seu relógio deixará de funcionar em algum momento do ano de 2038. O Linux não tem nenhum problema Y2K inerente , mas tem um problema no ano de 2038. Esperamos que todos nós já executemos o Linux em sistemas de 64 bits. Números inteiros de 64 bits manterão nossos relógios funcionando muito bem até aproximadamente o ano de 292271 milhões.


1

Algumas soluções:

date +"%Z %z"
timedatectl | grep "Time zone"
cat /etc/timezone

me deu (respectivamente):

UTC +0000
Time zone: Etc/UTC (UTC, +0000)
Etc/UTC

Meu computador está no UTC.


0

O uso de TZ ou data NÃO É CONFIÁVEL, pois indica o fuso horário do USUÁRIO, não o fuso horário padrão do sistema.

O fuso horário padrão do sistema é armazenado em / etc / fuso horário (que geralmente é um link simbólico para o arquivo de dados do fuso horário específico para o fuso horário). Se você não possui um / etc / fuso horário, consulte / etc / localtime. Geralmente esse é o fuso horário do "servidor". / etc / localtime geralmente é um link simbólico para um arquivo de fuso horário em / usr / share / zoneinfo. Esse caminho para o arquivo de fuso horário correto também fornecerá informações geográficas.

O linux mais recente possui "timedatectl", que fornece muitas informações quando o comando é executado.

(como um nó lateral, se você tiver um sistema antigo que ainda usa os fusos horários codificados OLD, provavelmente poderá copiar um arquivo de fuso horário moderno para ele e ele funcionará. em equipamentos mais antigos).


0

Às vezes, timedatectl set-timezonenão é atualizado/etc/timezone ; portanto, é melhor obter o tiemzone do nome do arquivo que o link simbólico /etc/timezoneaponta:

#!/bin/bash
set -euo pipefail

if filename=$(readlink /etc/localtime); then
    # /etc/localtime is a symlink as expected
    timezone=${filename#*zoneinfo/}
    if [[ $timezone = "$filename" || ! $timezone =~ ^[^/]+/[^/]+$ ]]; then
        # not pointing to expected location or not Region/City
        >&2 echo "$filename points to an unexpected location"
        exit 1
    fi
    echo "$timezone"
else  # compare files by contents
    # https://stackoverflow.com/questions/12521114/getting-the-canonical-time-zone-name-in-shell-script#comment88637393_12523283
    find /usr/share/zoneinfo -type f ! -regex ".*/Etc/.*" -exec \
        cmp -s {} /etc/localtime \; -print | sed -e 's@.*/zoneinfo/@@' | head -n1
fi

Referências: nesta resposta .


0

Você pode mostrar a data e o fuso horário simultaneamente:

date +'%d/%m/%Y  %H:%M:%S [%:z  %Z]'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.