2011-07-11 04:57:39 +0000 2011-07-11 04:57:39 +0000
135
135

Como verificar que fuso horário no Linux?

Existe alguma forma de verificar em que fuso horário estou actualmente no Linux?

Respostas (12)

252
252
252
2011-07-11 05:01:26 +0000

Se se refere à consola, digite apenas:

date +%Z
58
58
58
2015-02-13 16:22:27 +0000

Se quiser o fuso horário numérico:

date +'%:z %Z'

Saída de amostra:

-05:00 EST
26
26
26
2013-08-31 09:58:18 +0000

Queria antes encontrar o fuso horário na forma “US/Eastern” ou “Europe/London”. Pode encontrar isto em:

  • /etc/timezone (presente no Ubuntu e Red Hat? mas não por exemplo no Amazon Linux)
  • (em sistemas estilo Red Hat) como ZONE="US/Eastern" em /etc/sysconfig/clock
  • ou pode tentar combinar o /etc/localtime com um dos ficheiros em /usr/share/zoneinfo; irritantemente isto não parece ser uma ligação simbólica, mas pode, por exemplo
21
21
21
2011-07-11 04:59:58 +0000

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.

13
13
13
2016-05-10 10:50:27 +0000

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

7
7
7
2016-09-13 21:16:56 +0000

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
4
4
4
2015-07-22 04:58:52 +0000
$ strings /etc/localtime | tail -n 1
MST7MDT,M3.2.0,M11.1.0

Então estou no tempo da montanha. Embora os conselhos acima sobre a utilização de variáveis de ambiente ou apenas comandos de data funcionem por vezes melhor, dependendo de como pretende utilizar isso.

3
3
3
2018-07-01 14:02:51 +0000

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

http://wiki.archlinux.org/index.php/time#Time_zone

1
1
1
2018-04-16 15:36:04 +0000

Um par de soluções:

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

me deram (respectivamente):

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

O meu computador está no UTC.

0
0
0
2018-08-05 07:51:54 +0000

Pode mostrar a data e o fuso horário ao mesmo tempo:

date +'%d/%m/%Y %H:%M:%S [%:z %Z]'
0
0
0
2018-06-26 06:54:56 +0000

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 .

0
0
0
2017-11-15 00:31:57 +0000

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).