Questão Definir o fuso horário do terminal


Eu quero mudar o fuso horário do relógio do sistema do terminal.

Isso pode ser feito com

tzselect

"que abre um gui no terminal"

ou

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

"que irá definir para gmt"

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

Eu preciso fazer isso como eu estou escrevendo um aplicativo para ajustar o timeoffset ou relatar logs e a única informação que tenho é o IP do usuário. Eu posso usar um webapp para encontrar a localização do IP, mas então eu preciso definir o deslocamento que seria fácil se eu pudesse obter o deslocamento da localização, mas se eu 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.


174
2017-07-22 20:22


origem


Por favor, ajude-nos a pegar a resposta aceita. Eu acho que a resposta do @Mitch é a melhor askubuntu.com/a/323163/22308 - Nam G VU
@NAMGVU Não, o Mitch não é a melhor solução, é uma resposta "GUI em um terminal". Até o OP disse "isso não vai funcionar como eu preciso altr timezone de um programa sem entrada do usuário eu preciso de um comando eu posso alimentar em solução de não gui terminal"e esse é o mesmo objetivo que a maioria gostaria de ter ao procurar uma "solução de terminal", uma solução amigável ao script. Collin Anderson's é melhor se você conhece uma cidade, ou Ryan's para simples GMT + -n - Xen2050


Respostas:


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

sudo dpkg-reconfigure tzdata

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


274
2017-07-22 22:02



Este é o método mais fácil e indolor. - Thomas Ward♦
isso não vai funcionar como eu preciso altr timezone de um programa sem entrada do usuário eu preciso de um comando eu posso alimentar em terminal não gui solução obrigado pela resposta - user2155009
@ user2155009 solução fácil não-GUI puramente baseada em terminal está em Resposta de Collin Anderson. Não entendo por que alguém daria uma resposta da GUI a uma pergunta do Terminal. Se quiséssemos usar uma GUI, teríamos usado uma GUI de qualquer maneira, não lançaríamos o Terminal da GUI, depois lançaríamos uma GUI do Terminal ... - ADTC
THX!!! isso ajuda, byt eu já mudei manualmente etc / timezone =) como php.net/manual/en/timezones.php !!! absolutamente idêntico !!! - Vladimir Ch
@ADTC Exatamente meus pensamentos, downvoted por esse motivo. - Elijah Lynn


Você também pode usar o novo timedatectl para acertar a hora em 14.04.

sudo timedatectl set-timezone America/New_York

141
2017-09-15 15:43



Como você instala no Ubuntu? - Division by Zero
É instalado por padrão no 14.04. - Collin Anderson
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 posix e right prefixos é Aqui. - ADTC
Isso funciona! ... - Dan Nissenbaum
Usar sudo timedatectl set-timezone Etc/UTC para o UTC. - Zoltán


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

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

17
2017-07-22 20:43



obrigado colocar para resposta estou recebendo um erro ln: não conseguiu criar link simbólico `/ etc / localtime ': Arquivo existe oboiusly im não sei o que estou fazendo você sabe de bom tutorial para isso ou até mesmo algumas palavras-chave eu posso google obrigado sou eu usando o comando corretamente? estou usando o sudo ln / usr / share / zoneinfo / Etc / GMT $ + 1 / etc / localtime para definir o clock para + 1gmt - user2155009
minitech esqueceu a bandeira de força Eu acho que sim -> sudo ln -sf .... - Tele
Isso vai funcionar, mas não vai atualizar o nome do tz em /etc/timezone. - poolie


Percebo que esse segmento está um pouco desatualizado, mas eu estava procurando uma solução melhor porque precisava definir automaticamente o fuso horário em uma VM depois que um usuário faz o download do site e o implanta. Aqui está o que 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á geoip.ubuntu.com do servidor depois que ele for iniciado na nova rede (meu script verifica o primeiro curso de conectividade) e, em seguida, definirá o fuso horário do servidor com base na resposta.

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

Espero que ajude alguém!


16
2017-12-25 03:22



Ótimo! No Ubuntu 16.04, deve ser "grep zone" e "print $ 3". - user334639
Eu 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


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 o fuso horário.

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

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

A imagem abaixo mostra os passos e a confirmação de timedatectl

enter image description here


10
2018-05-06 02:21



é bom entender o que está acontecendo por trás da cortina, mas você não acha que seria melhor sugerir as ferramentas designadas para isso, como o dpkg-reconfigure tzdata etc.? - Patrick Cornelissen
@PatrickCornelissen Primeiro de tudo, há respostas para tzdata já, sugerir a mesma coisa é inútil. Segundo, tzdata faz praticamente o mesmo. Cabe ao usuário decidir o que prefere, por isso não é melhor nem pior - apenas a preferência de uma pessoa. - Sergiy Kolodyazhnyy
Bem, trabalhar "contra" as ferramentas de distribuição geralmente leva a problemas, então eu evitaria sua abordagem se possível, mas é justo que sua solução funcionasse (atualmente) - Patrick Cornelissen
Esta solução, como entendo, 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 Desde /var/lib/dpkg/info/tzdata.list sugere que todos os itens /usr/share/zoneinfo Vem com esse pacote, eu diria que você precisa instalar o pacote para ter todos os itens, mas francamente eu não tenho certeza, além de não estar muito familiarizado com o funcionamento de outras distribuições. Considere perguntar isso como uma pergunta sobre Unix e Linuxe sinta-se à vontade para fazer referência a este post se você quiser fornecer contexto para a pergunta. - Sergiy Kolodyazhnyy


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

Se você quiser 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 que você deseja, por exemplo um de

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

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

Então simplesmente

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

Note que ambos /etc/localtime e /etc/timezone deve ser consistente.

Provavelmente agora reinicie para obter todos os seus serviços atualizados também (por exemplo, cron).


10
2018-05-13 18:13



-1: nunca use cp para definir / etc / localtime. / etc / localtime é um link simbólico para o arquivo correto. Se você usar cp para mudá-lo, você irá realmente estrobiar o conteúdo de qualquer arquivo tzdata que esteja apontando atualmente, então 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 chato solucionar problemas, como posso dizer por experiência pessoal) - Foogod


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 faço:

cat /etc/timezone  

ou

sudo hwclock --show  

Eu então faço:

timedatectl set-timezone <_designation_>

Onde <_designation_> é um dos seguintes:

EUA / Leste
EUA / Central
EUA / 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


3
2018-03-29 19:04





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

Algumas respostas sugeridas usando os arquivos em / usr / share / zoneinfo / Etc, mas o problema com estes é que eles são agnósticos DST.

Portanto, a menos que você escolha uma 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 fazer isso genericamente.


0
2017-08-23 17:52