Zeitzoneneinstellung unter Linux [geschlossen]

157

Ich stelle die Zeitzone auf meinem Linux-Rechner auf GMT + 6 ein, indem ich die zoneinfo-Datei nach kopiere /etc/localtime, aber der dateBefehl zeigt die Zeit weiterhin als an UTCtime-6. Kann mir jemand dieses Verhalten erklären?

Ich gehe davon aus, dass der dateBefehl UTCtime+6Zeit anzeigen sollte. Hier sind die Schritte, denen ich folge:

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
quelle
Wurde die TZ-Umgebungsvariable gesetzt ( echo $TZerzeugt etwas anderes als eine leere Zeile)? Außerdem ist es möglicherweise besser, einen Symlink zu erstellen, /etc/localtimeanstatt die eigentliche Datei zu kopieren (auf diese Weise sind Sie sicher, falls sich die zoneinfo-Daten jemals ändern, was höchstwahrscheinlich niemals der Fall ist).
Sami Laine
Was ist die Distribution? Verschiedene Distributionen gehen unterschiedlich damit um!
SLM
@slm: Ich benutze Ubuntu 12.04
Rahul Dhobi
Sie kannten diese Richtlinie wahrscheinlich nicht, sollten jedoch nicht dieselben Qs auf den verschiedenen SE-Sites posten. stackoverflow.com/questions/21282367/timezone-setting-in-linux
slm
2
"Diese Frage wurde auf mehreren Websites veröffentlicht" Huh, das ist eine neue Frage für mich. Nie eine SE-Site mit so nahem Grund angetroffen. Wie auch immer, dies ist die erste Frage, die Google bei der Suche nach einer Änderung der Zeitzone in Linux stellt, und es ist die am häufigsten gestellte Frage von allen, die ich gesehen habe. Vielleicht sollte sie erneut geöffnet werden?
Ajedi32

Antworten:

273

Schauen Sie sich diesen Blog-Beitrag mit dem Titel: Gewusst wie: 2 Methoden zum Ändern der TimeZone unter Linux an .

Red Hat-Distributionen

Wenn Sie eine Distribution wie Red Hat verwenden, ist Ihr Ansatz zum Kopieren der Datei meist akzeptabel.

ANMERKUNG: Wenn Sie nach einer distro-agnostischen Lösung suchen, funktioniert dies auch unter Debian, obwohl es im Folgenden einfachere Ansätze gibt, wenn Sie sich nur mit Debian-Maschinen befassen müssen.

$ 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         

Ich würde jedoch eher empfehlen, darauf zu verlinken als zu kopieren.

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

Das aktuelle Datum zeigt die unterschiedliche Zeitzone:

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

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

Ubuntu / Debian Distros

Um die Zeitzone in einer dieser Distributionen zu ändern, können Sie diesen Befehl verwenden:

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

Wenn wir es uns jetzt ansehen:

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

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

HINWEIS: Es gibt auch diese Option in Ubuntu 14.04 und höher mit einem einzigen Befehl (Quelle: Ask Ubuntu - Einstellen der Zeitzone vom Terminal aus ):

$ sudo timedatectl set-timezone Etc/GMT-6

Über die Verwendung von "Etc / GMT + 6"

Auszug aus @ MattJohnsons Antwort auf SO

Zonen wie Etc/GMT+6werden absichtlich umgekehrt, um die Abwärtskompatibilität mit POSIX-Standards zu gewährleisten. Siehe die Kommentare in dieser Datei .

Sie sollten diese Zonen so gut wie nie benötigen. Stattdessen sollten Sie eine vollständig benannte Zeitzone wie verwenden America/New_Yorkoder Europe/Londonoder was auch immer für Ihren Standort geeignet ist . Beziehen Sie sich auf die Liste hier .

slm
quelle
1
Siehe
Rahul Dhobi
@ user3184706 - Sie haben hier ein Durcheinander gemacht. Ihr Q hier war, wie man die Zeitzone ändert, die ich antwortete. Das bisschen über die Verwendung von GMT .. Zeitzone oder nicht, dass die SO A angegeben ist genau, aber ich habe es versäumt, das hier aufzunehmen, da Sie nicht wirklich danach gefragt haben, obwohl ich dachte. Ich kann dieses Bit entweder zu diesem A hinzufügen oder Sie können diese Informationen hier als Ihr eigenes A kopieren / einfügen.
slm
@ user3184706 - um das aufzuräumen, habe ich Matt's A in meine aufgenommen, um es zu vervollständigen.
SLM
1
Beachten Sie jedoch, dass Sie unter Ubuntu das Paket installieren müssen, wenn Sie sich in einem Container befinden, da die darin enthaltenen tzdataDateien sonst /usr/share/zoneinfonicht existieren.
Elliott Slaughter
1
timedatectlfunktioniert auch für SLES 12.
Alexander Malakhov
24

So mache ich das in Ubuntu. Ersetzen Asia/TokyoSie einfach durch Ihre eigene Zeitzone.

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

sudo dpkg-reconfigure -f noninteractive tzdata

Es gibt einen Fehler in tzdata: Bestimmte Werte werden normalisiert durch 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
quelle
Dies funktioniert auch, aber in Debian / Ubuntu ist die Antwort von slm wahrscheinlich einfacher und weniger riskant (keine Möglichkeit von Tippfehlern)
Andreas Hartmann
17

Der Befehl tzselect wird ausgeführt, um das zu tun, was Sie möchten.

SHW
quelle
1
Und um dies in einer einzigen Zeile zusammenzufassen, in der die TZVariable auf Ihre lokale Zeitzone festgelegt wird - z. B. für America / Los_Angeles - export TZ=`printf "2\n49\n21\n1\n" | tzselect 2>&1 | tail -1` . Sie können diese Zeile in Ihre .profile , as tzselect-Anweisung einfügen, wenn Sie sie an der Eingabeaufforderung ausführen möchten.
Sameers