Impostazione del fuso orario in Linux [chiuso]


157

Sto impostando il fuso orario su GMT + 6 sulla mia macchina Linux copiando il file zoneinfo in /etc/localtime, ma il datecomando mostra ancora l'ora come UTCtime-6. Qualcuno può spiegarmi questo comportamento?

Suppongo che il datecomando dovrebbe visualizzare il UTCtime+6tempo. Ecco i passaggi che sto seguendo:

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

La variabile d'ambiente TZ è stata impostata ( echo $TZproduce qualcosa ma una riga vuota)? Inoltre, potrebbe essere una migliore idea creare un link simbolico /etc/localtimeinvece di copiare il file effettivo (in questo modo sarai al sicuro, nel caso in cui i dati di zoneinfo cambino, cosa che molto probabilmente non lo farà mai).
Sami Laine,

Qual è la distribuzione? Diverse distro gestiscono questo in modo diverso!
slm

@slm: sto usando Ubuntu 12.04
Rahul Dhobi il

Probabilmente non conoscevi questa politica, ma non dovresti postare gli stessi Q sui diversi siti SE. stackoverflow.com/questions/21282367/timezone-setting-in-linux
slm

2
"Questa domanda è stata pubblicata su più siti" Huh, questa è una nuova per me. Non ho mai incontrato un sito SE con una ragione simile. Comunque, questa è la prima domanda che viene posta su Google quando si cerca come cambiare un fuso orario in Linux, ed è la domanda più votata di tutte quelle che ho visto, quindi forse dovrebbe essere riaperta?
Ajedi32,

Risposte:


273

Dai un'occhiata a questo post del blog intitolato: How To: 2 metodi per modificare il fuso orario in Linux .

Distribuzioni Red Hat

Se stai usando una distribuzione come Red Hat, il tuo approccio alla copia del file sarebbe per lo più accettabile.

NOTA: Se stai cercando una soluzione distro-agnostica, questo funziona anche su Debian, anche se di seguito ci sono approcci più semplici se devi preoccuparti solo delle macchine 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         

Vorrei raccomandare il collegamento ad esso invece di copiare comunque.

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

Ora la data mostra il diverso fuso orario:

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

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

Distribuzioni Ubuntu / Debian

Per modificare il fuso orario su una di queste distro puoi usare questo 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.

Ora quando lo controlliamo:

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

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

NOTA: esiste anche questa opzione in Ubuntu 14.04 e versioni successive con un singolo comando (fonte: Chiedi a Ubuntu - impostazione del fuso orario dal terminale ):

$ sudo timedatectl set-timezone Etc/GMT-6

Sull'uso di "Etc / GMT + 6"

estratto dalla risposta di @ MattJohnson su SO

Le zone come Etc/GMT+6sono intenzionalmente invertite per la compatibilità all'indietro con gli standard POSIX. Vedi i commenti in questo file .

Non dovresti quasi mai usare queste zone. Invece dovresti usare un fuso orario con nome completo come America/New_Yorko Europe/Londono qualsiasi altra cosa sia appropriata per la tua posizione. Fare riferimento all'elenco qui .


1
fai riferimento alla risposta a questa domanda qui stackoverflow.com/questions/21282367/timezone-setting-in-linux
Rahul Dhobi

@ user3184706 - hai fatto un casino qui. La tua Q qui è stata su come cambiare il fuso orario, a cui ho risposto. Il fatto di usare GMT .. timezone o meno che il SO A fornito è accurato, ma ho trascurato di includerlo qui, dal momento che non me lo stavi chiedendo, anche se pensavo. Posso aggiungere quel bit a questa A oppure puoi copiare / incollare queste informazioni qui come la tua A.
slm

@ user3184706 - per provare a ripulirlo ho incluso Matt A nel mio per completarlo.
slm

1
Nota però che se sei in un contenitore, con Ubuntu devi installare il pacchetto tzdataaltrimenti i file /usr/share/zoneinfonon esisteranno.
Elliott Slaughter,

1
timedatectlfunziona anche per SLES 12.
Alexander Malakhov,

24

Ecco come lo faccio in Ubuntu. Sostituisci semplicemente Asia/Tokyocon il tuo fuso orario.

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

sudo dpkg-reconfigure -f noninteractive tzdata

C'è un bug in tzdata: alcuni valori vengono normalizzati da 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'

Questo funziona anche, ma in Debian / Ubuntu la risposta di slm è probabilmente più facile e meno rischiosa (nessuna possibilità di errori di battitura)
Andreas Hartmann,

17

Il comando tzselect è fatto per fare quello che vuoi.


1
E condensarlo in un'unica riga che imposta la TZvariabile sul fuso orario locale, ad esempio per America / Los Angeles - export TZ=`printf "2\n49\n21\n1\n" | tzselect 2>&1 | tail -1` . Puoi inserire questa riga nel tuo .profile , as tzselect`, se lo avvii al prompt.
stessi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.