Definindo o fuso horário no terminal


210

Quero alterar o fuso horário do relógio do sistema do terminal.

Isso pode ser feito com

tzselect

"que abre uma interface gráfica no terminal"

ou

sudo cp /usr/share/zoneinfo/Europe/London /etc/localtime

"que será definido como gmt"

Mas existe uma maneira de definir o fuso horário apenas com o deslocamento, ie.-1 ou +5 etc?

Preciso fazer isso enquanto escrevo um aplicativo para ajustar o tempo limite ou os logs de relatório, e as únicas informações que tenho são o IP do usuário. Posso usar um aplicativo da Web para encontrar a localização do IP, mas preciso definir o deslocamento, o que seria fácil se eu conseguisse obter o deslocamento do local, mas se precisar encontrar zona e cidade, seria uma dor real .

Se alguém souber a resposta de como acertar o relógio do sistema com +/- hora, seria ótimo.


Ajude-nos a escolher a resposta aceita. Acho @ resposta de Mitch é a melhor askubuntu.com/a/323163/22308
— Nam G VU

1
@NamGVU Não, a Mitch's não é a melhor solução, é uma resposta "GUI em um terminal". Até o OP disse que "isso não funcionará, pois preciso alterar o fuso horário de um programa sem a entrada do usuário. Preciso de um comando para alimentar a solução de terminal e não a GUI" , e esse é o mesmo objetivo que a maioria das pessoas desejaria ao procurar uma "solução de terminal, "um script-friendly. Collin Anderson é melhor se você conhecer uma cidade, ou Ryan para plain GMT + -n
— Xen2050

No ubuntu 18.04, o tzselect não abre uma GUI. Possui uma seleção de menu baseada em terminal.
— Tim Richardson

Respostas:


321

Para alterar o fuso horário do terminal, basta pressionar Ctrl+ Alt+ Tno teclado para abrir o Terminal. Quando abrir, execute o (s) comando (s) abaixo:

sudo dpkg-reconfigure tzdata

Depois de aberto, basta seguir as telas para alterar o fuso horário.


14
isso não vai funcionar como eu preciso fuso horário altr de um programa sem entrada do usuário eu preciso de um comando i pode alimentar no terminal não solução gui Obrigado pela resposta
— user2155009

1
valeu!!! isso ajuda, byt eu já mudei manualmente etc / fuso horário =) como php.net/manual/en/timezones.php !!! absolutamente idêntico !!!
— Vladimir Ch

A reconfiguração de tzdata parece ajustar o relógio do hardware também para que o horário exibido permaneça o mesmo após a troca do fuso horário. Você pode querer isso se o seu horário estiver correto, mas o fuso horário estiver errado. No entanto, você definitivamente não quer tocar no relógio do hardware enquanto viaja. A abordagem timedatectl parece alterar apenas o fuso horário.
— Cobra

@SnakE para mim exibida mudança de horário em conformidade
— Riad

eu mudei de massa de vidraceiro da linha de commad sem nenhum problema porque você disse que meu amigo? @ADTC
— sabre tabatabaee yazdi

170

Você também pode usar o novo timedatectlpara definir o horário no 14.04.

sudo timedatectl set-timezone America/New_York

Como você o instala no ubuntu?
— Divisão por Zero

1
É instalado por padrão no 14.04.
— Collin Anderson

6
Para ver todas as opções disponíveis, você pode executar ls -R --group-directories-first /usr/share/zoneinfo. (Cuidado para não modificar ou apagar nenhum arquivo aqui.) Mais informações sobre posixe rightprefixos estão aqui .
— ADTC

Isso funciona! ...
— Dan Nissenbaum

3
Use sudo timedatectl set-timezone Etc/UTCpara UTC.
— Zoltán

19

Você pode usar os arquivos GMT ± x em /usr/share/zoneinfo/Etc.

sudo ln -fs /usr/share/zoneinfo/Etc/GMT$offset /etc/localtime

obrigado atribuir a resposta estou recebendo um erro ln: falha ao criar link simbólico `/ etc / localtime ': o arquivo existe oboiusly não tenho certeza do que estou fazendo, você conhece um bom tutorial para isso ou até mesmo algumas palavras-chave que eu posso pesquisar no google? usando o comando corretamente? im usando sudo ln / usr / share / zoneinfo / Etc / GMT $ + 1 / etc / localtime para definir relógio para + 1gmt
— user2155009

9
minitech esqueceu a bandeira vigor Acho que sim -> sudo ln -sF ....
— Tele

1
Isso meio que funcionará, mas não atualizará o nome tz /etc/timezone.
— poolieby

1
Para atualizar o fuso horário / etc /, executesudo dpkg-reconfigure --frontend noninteractive tzdata
— Pierre Gramme

17

Sei que esse segmento é um pouco antigo, mas eu estava procurando uma solução melhor, porque precisava definir automaticamente o fuso horário em uma VM depois que um usuário o baixa do nosso site e o implanta. Aqui está o que eu acabei com:

echo "Setting TimeZone..."
export tz=`wget -qO - http://geoip.ubuntu.com/lookup | sed -n -e 's/.*<TimeZone>\(.*\)<\/TimeZone>.*/\1/p'` &&  timedatectl set-timezone $tz
export tz=`timedatectl status| grep Timezone | awk '{print $2}'`
echo "TimeZone set to $tz"

Isso consultará o geoip.ubuntu.com no servidor depois que ele for iniciado na nova rede (meu script verifica primeiro a conectividade) e depois define o fuso horário do servidor com base na resposta.

O "wget ​​-q0 -" diz ao wget para enviar apenas os resultados ao stdout, que é então canalizado para a variável $ tz.

Espero que ajude alguém!


1
Ótimo! No Ubuntu 16.04, deve ser "grep zone" e "print $ 3".
— user334639

Proponho um cli diferente para obter o fuso horário. Um pouco mais limpo na minha opinião: curl -s ' geoip.ubuntu.com/lookup ' | xmllint --xpath '/ Response / TimeZone / text ()' -
— Darko Miletic

11

TL; DR /etc/localtime é um link simbólico que aponta para um arquivo em /usr/share/zoneinfo/Continent/City. Ao alterar para onde aponta, você pode alterar seu fuso horário.

Para alterar o fuso horário, remova o /etc/localtimelink simbólico e atribua à sua cidade desejada. Por exemplo, ls -l /etc/localtimerelatórios que este arquivo aponta para /usr/share/zoneinfo/America/Denver. Para mudar para Nova York, eu faço

  1. sudo rm /etc/localtime
  2. sudo ln -s /usr/share/zoneinfo/America/New_York /etc/localtime
  3. Aguarde um minuto para que meu relógio seja atualizado

A captura de tela abaixo mostra as etapas e a confirmação de timedatectl

insira a descrição da imagem aqui


é bom entender o que está acontecendo atrás da cortina, mas você não acha que seria melhor sugerir as ferramentas designadas para isso, como dpkg-reconfigure tzdata etc.?
— Patrick Cornelissen

@PatrickCornelissen Primeiro de tudo, já existem respostas tzdata, então sugerir a mesma coisa é inútil. Segundo, tzdatafaz praticamente o mesmo. Cabe ao usuário decidir o que prefere, para que não seja melhor nem pior - apenas a preferência de uma pessoa.
— precisa saber é o seguinte

1
Bem, trabalhando "contra" as ferramentas de distribuição muitas vezes leva a problemas, então eu gostaria de evitar a sua abordagem, se possível, mas bastante justo sua solução funcionaria (atualmente)
— Patrick Cornelissen

Esta solução, pelo que entendi, funciona em diferentes distribuições. Mas ainda precisa do banco de dados de fuso horário disponível no diretório / usr / share / zoneinfo. Existe uma maneira de obter o banco de dados de fuso horário sem instalar o pacote tzdata?
— andho

@andho Como /var/lib/dpkg/info/tzdata.listsugere que todos os itens /usr/share/zoneinfovêm com esse pacote, eu suponho que você precisa instalar o pacote para ter todos os itens, mas, francamente, não tenho certeza, além de não estar familiarizado com o modo como isso funciona em outros distribuições. Considere fazer isso como uma pergunta no Unix e Linux e sinta-se à vontade para fazer referência a este post se desejar fornecer um contexto para a pergunta.
— Sergiy Kolodyazhnyy

10

A maneira mais fácil de atualizar o fuso horário é usar sudo dpkg-reconfigure tzdata. Mas isso não é tão fácil de criar scripts.

Se você deseja definir o fuso horário explicitamente por meio de um script (por exemplo, para configurar uma VM), aqui está uma receita:

Defina uma variável para o fuso horário desejado, por exemplo, um dos

tz=Europe/London
tz=America/Anchorage
tz=Etc/GMT+6

Valores válidos são os diretórios e nomes de arquivos em /usr/share/zoneinfo.

Então simplesmente

sudo cp -vf /usr/share/zoneinfo/$tz /etc/localtime
echo $tz | sudo tee /etc/timezone

Observe que ambos /etc/localtimee /etc/timezonedevem ser consistentes.

Provavelmente agora reinicie para atualizar todos os seus serviços (por exemplo, cron).


-1: nunca use cppara definir / etc / localtime. / etc / localtime é um link simbólico para o arquivo correto. Se você usar cpessa alteração, irá na verdade derrotar o conteúdo de qualquer arquivo tzdata para o qual está apontando, de repente (por exemplo) o arquivo tzdata UTC contém dados de fuso horário para Europa / Londres em vez de UTC, o que é ruim (e irritante) para solucionar problemas, como eu posso dizer por experiência pessoal)
— Foogod

5

Aqui está o método que eu uso, que é centrado nos EUA, pois não preciso me preocupar com fusos horários fora dos EUA.

Se eu precisar determinar o fuso horário atual, eu também:

cat /etc/timezone  

ou

sudo hwclock --show  

Eu faço então:

timedatectl set-timezone <_designation_>

Onde <_designation_>é um dos seguintes:

EUA / Leste
dos EUA / EUA Central
/ Montanha
EUA / Pacífico
EUA / Alasca
EUA / Aleutian
EUA / Arizona
EUA / Leste-Indiana
EUA / Havaí
EUA / Indiana-Starke
EUA / Michigan
EUA / Pacífico-Novo
EUA / Samoa

POR EXEMPLO:

timedatectl set-timezone US/Eastern  

Outras designações de fuso horário podem ser encontradas aqui: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones


tzselecté uma boa maneira de obter a seqüência fuso horário
— Martin Thoma

0

Você não pode fazer isso, a menos que selecione o arquivo de fuso horário que deseja corresponder a cada deslocamento de fuso horário.

Algumas respostas sugeriram o uso dos arquivos em / usr / share / zoneinfo / Etc, mas o problema é que eles são agnósticos de horário de verão.

Portanto, a menos que você escolha alguma configuração de fuso horário para corresponder a cada deslocamento ou não se preocupe com o horário de verão, não há como fazê-lo genericamente.

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.