Existe uma maneira de verificar em qual fuso horário estou atualmente no Linux?
Existe uma maneira de verificar em qual fuso horário estou atualmente no Linux?
Respostas:
Geralmente, a TZ
variável de ambiente diz 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. Ou seja, não tente fazer a conversão você mesmo .
date
vou te contar.
echo $TZ
não retorna nada para mim.
Se você quer dizer com o console, digite:
date +%Z
+07
para mim. Para entrar Region/City
em um Linux baseado em Debian / Arch, veja esta resposta .
Se você deseja o fuso horário numérico:
date +'%:z %Z'
Saída de amostra:
-05:00 EST
:z EST
date
. A versão do BusyBox imprime algo não sensorial, "%: z CEST" no meu caso.
linux
ubuntu-10.04
Eu queria encontrar o fuso horário no formato "EUA / Leste" ou "Europa / Londres". Você pode encontrar isso em:
ZONE="US/Eastern"
em / etc / sysconfig / clockou 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.
find /usr/share/zoneinfo/ -type f| xargs md5sum | grep $(md5sum /etc/localtime | cut -d' ' -f1)
Para o ubuntu, tente o seguinte:
$ cat /etc/timezone
Saída de amostra:
Asia/Kolkata
Para outras distribuições Referência: https://unix.stackexchange.com/questions/110522/timezone-setting-in-linux
timedatectl set-timezone
não é atualizado/etc/timezone
. Veja esta resposta para uma solução baseada em /etc/localtime
.
Às vezes, você pode estar procurando pelo fuso horário canônico, e não pela forma abreviada, produzida por date %Z
exemplo US/Eastern
. Em sistemas com, timedatectl
por exemplo, o 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 correspondente get-timezone
. Analise da seguinte maneira:
# timedatectl status | grep "zone" | sed -e 's/^[ ]*Time zone: \(.*\) (.*)$/\1/g'`
US/Eastern
Para o fuso horário, você pode usar a localização geográfica:
$ curl https://ipapi.co/timezone
America/Chicago
Ou:
$ curl http://ip-api.com/line?fields=timezone
America/Chicago
/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.
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).
Às vezes, timedatectl set-timezone
não é atualizado/etc/timezone
; portanto, é melhor obter o tiemzone do nome do arquivo que o link simbólico /etc/timezone
aponta:
#!/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 .
Você pode mostrar a data e o fuso horário simultaneamente:
date +'%d/%m/%Y %H:%M:%S [%:z %Z]'