Frage Zeitzone vom Terminal einstellen


Ich möchte die Zeitzone der Systemuhr vom Terminal aus ändern.

Dies kann mit durchgeführt werden

tzselect

"Das öffnet eine Gui im ​​Terminal"

oder

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

"welches auf gmt gesetzt wird"

Aber gibt es eine Möglichkeit, die Zeitzone nur mit dem Offset ie.-1 oder +5 usw. einzustellen?

Ich muss dies tun, während ich eine Anwendung schreibe, um Zeitoffset- oder Berichtsprotokolle anzupassen, und die einzige Information, die ich habe, ist die Benutzer-IP. Ich kann eine Webapp verwenden, um den Standort der IP zu finden, aber dann muss ich Offset einstellen, was einfach wäre, wenn ich nur den Offset des Standorts bekommen könnte, aber wenn ich Zone und Stadt finden muss, wäre es ein echter Schmerz .

Wenn jemand die Antwort weiß, wie man den Systemtakt mit +/- Stunde einstellt, wäre das toll.


174
2017-07-22 20:22


Ursprung


Bitte helfen Sie uns, die angenommene Antwort anzunehmen. Ich denke @mitchs Antwort ist die beste askubuntu.com/a/323163/22308 - Nam G VU
@NamGVU Nein, Mitch's ist nicht die beste Lösung, es ist eine "GUI in einem Terminal" Antwort. Sogar das OP sagte "Das funktioniert nicht, da ich Zeitzone von einem Programm ohne Benutzereingabe brauche ich brauche einen Befehl, den ich in Terminal nicht gui Lösung einspeisen kann"und das ist das gleiche Ziel, das die meisten wünschen würden, wenn sie nach einer "terminalen Lösung" suchen, einem skriptfreundlichen. Collin Andersons ist besser, wenn Sie eine Stadt kennen, oder Ryans für einfache GMT + -n - Xen2050


Antworten:


Um die Zeitzone vom Terminal zu ändern, drücken Sie einfach Strg+Alt+T auf Ihrer Tastatur, um Terminal zu öffnen. Wenn es geöffnet wird, führen Sie die folgenden Befehle aus:

sudo dpkg-reconfigure tzdata

Öffnen Sie einfach die Bildschirme, um die Zeitzone zu ändern.


274
2017-07-22 22:02



Dies ist die einfachste und schmerzloseste Methode. - Thomas Ward♦
das funktioniert nicht, weil ich Zeitzone von einem Programm ohne Benutzereingabe altz brauche ich brauche einen Befehl, den ich in Terminal gui Lösung einziehen kann, danke für die Antwort - user2155009
@ user2155009 sehr einfach nicht GUI rein Terminal-basierte Lösung ist in Collin Andersons Antwort. Ich verstehe nicht, warum jemand eine Terminalfrage mit einer GUI beantworten würde. Wenn wir eine GUI verwenden wollten, hätten wir sowieso eine GUI benutzt, nicht Terminal von der GUI starten, dann eine GUI von Terminal starten ... - ADTC
Danke!!! das hilft, bin ich schon manuell geändert etc / Zeitzone =) wie php.net/manual/de/timezones.php !!! absolut identisch !!! - Vladimir Ch
@ ADTC Genau meine Gedanken, aus diesem Grund abgelehnt. - Elijah Lynn


Sie können auch das Neue verwenden timedatectl die Uhrzeit in 14.04.

sudo timedatectl set-timezone America/New_York

141
2017-09-15 15:43



Wie installierst du es auf Ubuntu? - Division by Zero
Es ist standardmäßig am 14.04 installiert. - Collin Anderson
Um alle verfügbaren Optionen anzuzeigen, können Sie ausführen ls -R --group-directories-first /usr/share/zoneinfo. (Achten Sie darauf, dass Sie hier keine Datei ändern oder löschen.) Mehr Informationen über posix und right Präfixe ist Hier. - ADTC
Das funktioniert! ... - Dan Nissenbaum
Benutzen sudo timedatectl set-timezone Etc/UTC für UTC. - Zoltán


Sie können den GMT ± verwendenx Dateien in /usr/share/zoneinfo/Etc.

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

17
2017-07-22 20:43



Vielen Dank für die Antwort Ich bekomme einen Fehler ln: Fehler beim Erstellen symbolischer Link `/ etc / localtime ': Datei existiert oboiusly ich bin nicht sicher, was ich tun tun Sie wissen, gute Tutorial für diese oder sogar einige Schlüsselwörter kann ich google danke bin ich Befehl korrekt verwenden? Ich benutze sudo ln / usr / share / zoneinfo / Etc / GMT $ + 1 / etc / localtime um Uhr auf + 1gmt zu setzen - user2155009
Minitech vergaß die Kraftflagge Ich denke so -> Sudo ln -sf .... - Tele
Dies wird funktionieren, aber den tz Namen nicht aktualisieren /etc/timezone. - poolie


Ich weiß, dass dieser Thread etwas veraltet ist, aber ich suchte nach einer besseren Lösung, weil ich die Zeitzone in einer VM automatisch festlegen musste, nachdem ein Benutzer sie von unserer Website heruntergeladen und bereitgestellt hat. Hier ist, womit ich endete:

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"

Dies wird geoip.ubuntu.com vom Server abfragen, sobald es im neuen Netzwerk gestartet wurde (mein Skript prüft zuerst den Konnektivitätskonnekt) und dann die Zeitzone des Servers basierend auf der Antwort einstellen.

Das "wget ​​-q0 -" teilt wget mit, dass nur die Ergebnisse in stdout ausgegeben werden sollen, die dann an die Variable $ tz übergeben werden.

Hoffe es hilft jemandem!


16
2017-12-25 03:22



Groß! Unter Ubuntu 16.04 sollte es stattdessen "grep zone" und "print $ 3" ​​sein. - user334639
Ich schlage einen anderen Client vor, um die Zeitzone zu bekommen. Ein bisschen sauberer aus meiner Sicht: Curls-'geoip.ubuntu.com/lookup '; | xmllint --xpath '/ Antwort / Zeitzone / text ()' - - Darko Miletic


TL; DR  /etc/localtime ist ein symbolischer Link, der auf eine Datei in verweist /usr/share/zoneinfo/Continent/City. Indem Sie ändern, wo es zeigt, können Sie Ihre Zeitzone ändern.

Um die Zeitzone zu ändern, entfernen Sie die /etc/localtime und weisen Sie Ihrer gewünschten Stadt einen symbolischen Link zu. Zum Beispiel, ls -l /etc/localtime meldet, dass diese Datei auf verweist /usr/share/zoneinfo/America/Denver. Um es nach New York zu ändern, tue ich

  1. sudo rm /etc/localtime
  2. sudo ln -s /usr/share/zoneinfo/America/New_York /etc/localtime
  3. Warten Sie eine Minute, bis meine Uhr aktualisiert ist

Der Screenshot unten zeigt die Schritte und die Bestätigung von timedatectl

enter image description here


10
2018-05-06 02:21



Es ist schön zu verstehen, was hinter dem Vorhang passiert, aber denkst du nicht, dass es besser wäre, die dafür vorgesehenen Werkzeuge wie dpkg-reconfigure tzdata usw. vorzuschlagen? - Patrick Cornelissen
@PatrickCornelissen Zuallererst gibt es Antworten für tzdata schon, so dass das gleiche Ding sinnlos ist. Zweite, tzdata tut ziemlich genau so. Es liegt am Benutzer zu entscheiden, was sie bevorzugen, also ist es weder besser noch schlechter - nur die Präferenz einer Person. - Sergiy Kolodyazhnyy
Nun, das Arbeiten gegen die Verteilungstools führt oft zu Problemen, daher würde ich Ihre Vorgehensweise möglichst vermeiden, aber Ihre Lösung würde (zur Zeit) funktionieren. - Patrick Cornelissen
Diese Lösung, so wie ich sie verstehe, funktioniert über verschiedene Distributionen hinweg. Die Zeitzonen-Datenbank muss jedoch weiterhin im Verzeichnis / usr / share / zoneinfo verfügbar sein. Gibt es eine Möglichkeit, die Zeitzonendatenbank ohne installiertes tzdata-Paket zu erhalten? - andho
@andho Seit /var/lib/dpkg/info/tzdata.list schlägt vor, dass alle Artikel in /usr/share/zoneinfo Wenn Sie mit diesem Paket kommen, würde ich annehmen, dass Sie das Paket installieren müssen, um alle Elemente zu haben, aber ehrlich gesagt bin ich mir nicht ganz sicher, außerdem nicht ganz vertraut mit dem, wie das bei anderen Distributionen funktioniert. Betrachten Sie dies als eine Frage an Unix und Linux, und fühlen Sie sich frei, diesen Beitrag zu verweisen, wenn Sie Kontext für die Frage bereitstellen möchten. - Sergiy Kolodyazhnyy


Die einfache Art, die Zeitzone zu aktualisieren, ist zu verwenden sudo dpkg-reconfigure tzdata. Aber das ist nicht so einfach zu schreiben.

Wenn Sie die Zeitzone explizit über ein Skript festlegen möchten (z. B. zum Einrichten einer VM), folgt hier ein Rezept:

Legen Sie eine Variable für die gewünschte Zeitzone fest, z. einer von

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

Gültige Werte sind die Verzeichnisse und Dateinamen unter /usr/share/zoneinfo.

Dann einfach

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

Beachten Sie, dass beide /etc/localtime und /etc/timezone muss konsistent sein.

Wahrscheinlich jetzt Neustart, um alle Ihre Dienste zu aktualisieren (z. B. cron).


10
2018-05-13 18:13



-1: Benutze niemals cp um / etc / localtime einzustellen. / etc / localtime ist ein Symlink in die richtige Datei. Wenn du benutzt cp Um es zu ändern, werden Sie den Inhalt der aktuellen zddata-Datei, auf die es gerade zeigt, überdecken, so dass die UTC-tzdata-Datei plötzlich Zeitzonendaten für Europa / London enthält anstatt für UTC, was schlecht ist (und lästig bei der Fehlersuche ist). wie ich aus eigener Erfahrung sagen kann) - Foogod


Hier ist die Methode, die ich benutze, die US-zentriert ist, da ich mich nicht um nicht-amerikanische Zeitzonen kümmern muss.

Wenn ich die aktuelle Zeitzone bestimmen muss, mache ich entweder:

cat /etc/timezone  

oder

sudo hwclock --show  

Ich mache dann:

timedatectl set-timezone <_designation_>

woher <_designation_> ist einer der folgenden:

US / Ost
US / Zentral
US / Berg
USA / Pazifik
USA / Alaska
US / Aleuten
USA / Arizona
US / Ost-Indiana
USA / Hawaii
USA / Indiana-Starke
US / Michigan
US / Pazifik-Neu
USA / Samoa

Z.B.:

timedatectl set-timezone US/Eastern  

Andere Zeitzonenbezeichnungen finden Sie hier: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones


3
2018-03-29 19:04





Dies ist nicht möglich, es sei denn, Sie wählen die Zeitzonendatei aus, die den einzelnen Zeitzonen-Offsets entsprechen soll.

Einige Antworten schlugen vor, die Dateien in / usr / share / zoneinfo / Etc zu verwenden, aber das Problem ist, dass sie unabhängig von der Sommerzeit sind.

Wenn Sie also keine Zeitzonenkonfiguration für jeden Offset auswählen oder wenn Sie sich nicht für die Sommerzeit interessieren, gibt es keine Möglichkeit, dies generisch zu tun.


0
2017-08-23 17:52