Configuração de fuso horário no Linux [fechado]

157

Estou definindo o fuso horário como GMT + 6 na minha máquina Linux, copiando o arquivo zoneinfo para /etc/localtime, mas o datecomando ainda está mostrando o horário como UTCtime-6. Alguém pode me explicar esse comportamento?

Estou assumindo que o datecomando deve exibir a UTCtime+6hora. Aqui estão os passos que estou seguindo:

date
Wed Jan 22 17:29:01 IST 2014

date -u
Wed Jan 22 11:59:01 UTC 2014

cp /usr/share/zoneinfo/Etc/GMT+6 /etc/localtime

date
Wed Jan 22 05:59:21 GMT+6 2014

date -u
Wed Jan 22 11:59:01 UTC 2014
Rahul Dhobi
fonte
A variável de ambiente TZ foi definida ( echo $TZproduz algo além de uma linha vazia)? Além disso, pode ser uma idéia melhor criar um link simbólico para em /etc/localtimevez de copiar o arquivo real (dessa forma, você estará seguro, caso os dados da zoneinfo sejam alterados, o que provavelmente nunca acontecerá).
Sami Laine
Qual é a distribuição? Distros diferentes lidam com isso de maneira diferente!
slm
@slm: Eu estou usando o Ubuntu 12.04
Rahul Dhobi
Você provavelmente não conhecia essa política, mas não deve postar os mesmos Q's nos diferentes sites da SE. stackoverflow.com/questions/21282367/timezone-setting-in-linux
slm
2
"Esta pergunta foi publicada em vários sites" Huh, isso é novo para mim. Nunca encontrou um site SE com um motivo próximo como esse. Enfim, esta é a primeira pergunta que surge no Google ao pesquisar como alterar um fuso horário no Linux, e é a pergunta mais votada de todas as que eu já vi, então talvez deva ser reaberta?
precisa saber é o seguinte

Respostas:

273

Dê uma olhada nesta postagem do blog intitulada: Como: 2 métodos para alterar o fuso horário no Linux .

Distros da Red Hat

Se você estiver usando uma distribuição como a Red Hat, sua abordagem de copiar o arquivo será aceitável.

NOTA: Se você está procurando uma solução independente de agnóstico, isso também funciona no Debian, embora existam abordagens mais simples abaixo se você precisar se preocupar apenas com as máquinas Debian.

$ ls /usr/share/zoneinfo/
Africa/      CET          Etc/         Hongkong     Kwajalein    Pacific/     ROK          zone.tab
America/     Chile/       Europe/      HST          Libya        Poland       Singapore    Zulu
Antarctica/  CST6CDT      GB           Iceland      MET          Portugal     Turkey       
Arctic/      Cuba         GB-Eire      Indian/      Mexico/      posix/       UCT          
Asia/        EET          GMT          Iran         MST          posixrules   Universal    
Atlantic/    Egypt        GMT0         iso3166.tab  MST7MDT      PRC          US/          
Australia/   Eire         GMT-0        Israel       Navajo       PST8PDT      UTC          
Brazil/      EST          GMT+0        Jamaica      NZ           right/       WET          
Canada/      EST5EDT      Greenwich    Japan        NZ-CHAT      ROC          W-SU         

Eu recomendaria vincular a ele em vez de copiar no entanto.

$ sudo unlink /etc/localtime 
$ sudo ln -s /usr/share/zoneinfo/Etc/GMT+6 /etc/localtime

Agora, a data mostra o fuso horário diferente:

$ date -u
Thu Jan 23 05:40:31 UTC 2014

$ date 
Wed Jan 22 23:40:38 GMT+6 2014

Distros Ubuntu / Debian

Para alterar o fuso horário em qualquer uma dessas distros, você pode usar este comando:

$ sudo dpkg-reconfigure tzdata

    ss # 1

$ sudo dpkg-reconfigure tzdata

Current default time zone: 'Etc/GMT-6'
Local time is now:      Thu Jan 23 11:52:16 GMT-6 2014.
Universal Time is now:  Thu Jan 23 05:52:16 UTC 2014.

Agora, quando verificamos:

$ date -u
Thu Jan 23 05:53:32 UTC 2014

$ date 
Thu Jan 23 11:53:33 GMT-6 2014

NOTA: Também há esta opção no Ubuntu 14.04 e superior com um único comando (fonte: Ask Ubuntu - configurando o fuso horário no terminal ):

$ sudo timedatectl set-timezone Etc/GMT-6

Sobre o uso de "Etc / GMT + 6"

trecho da resposta de @ MattJohnson no SO

Zonas como Etc/GMT+6são intencionalmente revertidas para compatibilidade retroativa com os padrões POSIX. Veja os comentários neste arquivo .

Você quase nunca precisa usar essas zonas. Em vez disso, você deve usar um fuso horário totalmente nomeado como America/New_Yorkou Europe/Londonou o que for apropriado para a sua localização. Consulte a lista aqui .

slm
fonte
1
referem resposta desta pergunta aqui stackoverflow.com/questions/21282367/timezone-setting-in-linux
Rahul Dhobi
@ user3184706 - você meio que fez uma bagunça aqui. Seu Q aqui foi como alterar o fuso horário, que eu respondi. O pouco sobre o uso do GMT .. fuso horário ou não, que o SO A fornecido é preciso, mas eu esqueci de incluí-lo aqui, já que você não estava realmente perguntando sobre isso, embora eu pensasse. I pode adicionar que pouco a este A ou você pode copiar / colar essa informação aqui como seu próprio A.
SLM
@ user3184706 - para tentar limpar isso, incluí o A de Matt no meu para torná-lo completo.
slm
1
Observe que, se você estiver em um contêiner, com o Ubuntu você precisará instalar o pacote tzdataou os arquivos /usr/share/zoneinfonão existirão.
Elliott Slaughter
1
timedatectltambém funciona para o SLES 12.
Alexander Malakhov
24

É assim que eu faço no Ubuntu. Basta substituir Asia/Tokyopor seu próprio fuso horário.

echo 'Asia/Tokyo' | sudo tee /etc/timezone

sudo dpkg-reconfigure -f noninteractive tzdata

Há um erro em tzdata: determinados valores são normalizados por dpkg-reconfigure:

echo 'US/Central' >/etc/timezone
dpkg-reconfigure -f noninteractive tzdata
# Current default time zone: 'America/Chicago'

echo 'US/Eastern' >/etc/timezone
apt-get install --reinstall tzdata
# Current default time zone: 'America/New_York'
user241
fonte
Isso também funciona, mas no Debian / Ubuntu, a resposta de SLM é provavelmente mais fácil e menos arriscado (nenhuma possibilidade de erros de digitação)
Andreas Hartmann
17

O comando tzselect é feito para fazer o que você deseja.

SHW
fonte
1
E condensar isso em uma única linha que define a TZvariável para o seu fuso horário local - por exemplo, para America / Los_Angeles - export TZ=`printf "2\n49\n21\n1\n" | tzselect 2>&1 | tail -1` . Você pode colocar esta linha no seu .profile , as tzselect`, sugerindo-lhe, se você a executasse no prompt.
Sameers