Como verificar que fuso horário no Linux?
Existe alguma forma de verificar em que fuso horário estou actualmente no Linux?
Existe alguma forma de verificar em que fuso horário estou actualmente no Linux?
Se quiser o fuso horário numérico:
date +'%:z %Z'
Saída de amostra:
-05:00 EST
Queria antes encontrar o fuso horário na forma “US/Eastern” ou “Europe/London”. Pode encontrar isto em:
ZONE="US/Eastern"
em /etc/sysconfig/clock Normalmente, a variável de ambiente TZ
dir-lhe-á algo útil. No entanto, é melhor usar funções como mktime()
e localtime()
para converter entre time_t
e uma representação de fuso horário local. Isto é, não tente fazer a conversão você mesmo.
Para o ubuntu tente isto :
$ cat /etc/timezone
Saída de amostra :
Asia/Kolkata
Para outras distro Referência : https://unix.stackexchange.com/questions/110522/timezone-setting-in-linux
Por vezes pode estar à procura do fuso horário canónico em vez da forma curta produzida por date %Z
, por exemplo, US/Eastern
. Em sistemas com timedatectl
e.g. Fedora, timedatectl
produz muita informação útil, incluindo a zona actual:
# 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
toma set-timezone
como comando, mas não tem get-timezone
correspondente. Analise-o da seguinte forma:
# timedatectl status | grep "zone" | sed -e 's/^[]*Time zone: \(.*\) (.*)$//g'`
US/Eastern
Para o fuso horário, pode usar geolocalização:
$ curl https://ipapi.co/timezone
America/Chicago
Ou:
$ curl http://ip-api.com/line?fields=timezone
America/Chicago
Pode mostrar a data e o fuso horário ao mesmo tempo:
date +'%d/%m/%Y %H:%M:%S [%:z %Z]'
Por vezes timedatectl set-timezone
não actualiza /etc/timezone
, por isso é melhor obter a tiemzone do nome do ficheiro que o symlink /etc/timezone
aponta para:
#!/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: em esta resposta .
A utilização de TZ ou data NÃO É FELICITÁVEL porque indica o fuso horário do utilizador e não o fuso horário padrão do sistema.
O fuso horário padrão do sistema é armazenado em /etc/timezone (que é muitas vezes uma ligação simbólica ao ficheiro de dados do fuso horário específico para o fuso horário). Se não tiver um /etc/timezone, veja o /etc/localtime. Geralmente esse é o fuso horário do “servidor”. O /etc/localtime é frequentemente um link simbólico para um ficheiro de fuso horário em /usr/share/zoneinfo. Esse caminho para o arquivo de fuso horário correto muitas vezes também lhe dará informações geográficas.
Os novos linux têm “timedatectl” que lhe dá toneladas de informações quando o comando é executado.
(como um nó lateral, se você tem um sistema antigo que ainda usa os fusos horários codificados OLD, você provavelmente pode copiar um arquivo de fuso horário moderno para ele e ele funcionará. Tive de fazer isto muitas vezes para resolver alterações de fusos horários em equipamentos mais antigos).