Domanda Impostazione del fuso orario dal terminale


Voglio cambiare il fuso orario dell'orologio di sistema dal terminale.

Questo può essere fatto con

tzselect

"che apre una GUI nel terminale"

o

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

"che verrà impostato su gmt"

Ma esiste un modo per impostare il fuso orario con il solo offset, ad es. -1 o +5 ecc.?

Ho bisogno di farlo mentre sto scrivendo un'applicazione per regolare il timeoffset oi registri dei report e le uniche informazioni che ho sono l'IP dell'utente. Posso usare una webapp per trovare la posizione dell'IP, ma poi ho bisogno di impostare l'offset che sarebbe facile se potessi ottenere l'offset della posizione, ma se dovessi trovare zone e città sarebbe un vero dolore .

Se qualcuno conosce la risposta a come impostare l'orologio di sistema con +/- ora sarebbe fantastico.


174
2017-07-22 20:22


origine


Per favore aiutaci a raccogliere la risposta accettata. Penso che la risposta di @ Mitch sia la migliore askubuntu.com/a/323163/22308 - Nam G VU
@NAMGVU No, Mitch's non è la soluzione migliore, è una risposta "GUI in a terminal". Anche l'OP ha detto "questo non funzionerà come ho bisogno di altro fuso orario da un programma senza input dell'utente ho bisogno di un comando che posso alimentare in soluzione terminale non gui"e questo è lo stesso obiettivo che la maggior parte vorrebbe quando si cerca una "soluzione terminale", una sceneggiatura amichevole. Di Collin Anderson è meglio se conosci una città, o Ryan per semplice GMT + -n - Xen2050


risposte:


Per cambiare il fuso orario dal terminale, basta premere Ctrl+alt+T sulla tastiera per aprire Terminal. Quando si apre, esegui i comandi seguenti:

sudo dpkg-reconfigure tzdata

Una volta aperto, basta seguire le schermate per cambiare il fuso orario.


274
2017-07-22 22:02



Questo è il metodo più semplice e indolore. - Thomas Ward♦
questo non funzionerà come ho bisogno di altro fuso orario da un programma senza input dell'utente ho bisogno di un comando che posso alimentare in terminale non gui soluzione grazie per la risposta - user2155009
@ user2155009 molto semplice non-GUI puramente soluzione basata su terminale è in La risposta di Collin Anderson. Non capisco perché qualcuno darebbe una risposta GUI ad una domanda di Terminale. Se volessimo utilizzare una GUI, avremmo comunque utilizzato una GUI, non avviare Terminal dalla GUI, quindi avviare una GUI dal terminale ... - ADTC
grazie!!! questo aiuta, di solito sono già cambiato manualmente etc / fuso orario =) Mi piace php.net/manual/en/timezones.php !!! assolutamente identico !!! - Vladimir Ch
@ADTC Esattamente i miei pensieri, downvoted per quella ragione. - Elijah Lynn


Puoi anche usare il nuovo timedatectl per impostare l'ora in 14.04.

sudo timedatectl set-timezone America/New_York

141
2017-09-15 15:43



Come lo installate su ubuntu? - Division by Zero
È installato per impostazione predefinita il 14.04. - Collin Anderson
Per vedere tutte le opzioni disponibili, è possibile eseguire ls -R --group-directories-first /usr/share/zoneinfo. (Fare attenzione a non modificare o cancellare alcun file qui.) Maggiori informazioni su posix e right prefissi è Qui. - ADTC
Funziona! ... - Dan Nissenbaum
Uso sudo timedatectl set-timezone Etc/UTC per UTC. - Zoltán


Puoi usare il GMT ±X file in /usr/share/zoneinfo/Etc.

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

17
2017-07-22 20:43



grazie per la risposta im ottenendo un errore ln: impossibile creare il collegamento simbolico `/ etc / localtime ': il file esiste oboiusly non so cosa sto facendo sai di buon tutorial per questo o anche alcune parole chiave posso google grazie usando il comando correttamente? im usando sudo ln / usr / share / zoneinfo / Etc / GMT $ + 1 / etc / localtime per impostare l'orologio su + 1gmt - user2155009
minitech ha dimenticato la bandiera della forza immagino di sì -> sudo ln -sf .... - Tele
Questo funzionerà, ma non aggiornerà il nome tz in /etc/timezone. - poolie


Mi rendo conto che questa discussione è un po 'datata, ma stavo cercando una soluzione migliore perché avevo bisogno di impostare automaticamente il fuso orario in una VM dopo che un utente lo ha scaricato dal nostro sito Web e lo distribuiva. Ecco cosa ho finito con:

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"

Questo interrogherà geoip.ubuntu.com dal server una volta che è stato avviato sulla nuova rete (il mio script controlla prima la connettività) e quindi imposta il fuso orario del server in base alla risposta.

Il "wget ​​-q0 -" dice a wget di mostrare solo i risultati allo stdout che viene poi reindirizzato alla variabile $ tz.

Spero che aiuti qualcuno!


16
2017-12-25 03:22



Grande! Su Ubuntu 16.04 dovrebbe invece essere "grep zone" e "print $ 3". - user334639
Propongo un cli differente per ottenere il fuso orario. Un po 'più pulito a mio avviso: curl-s'geoip.ubuntu.com/lookup'; | xmllint --xpath '/ Response / TimeZone / text ()' - - Darko Miletic


TL; DR  /etc/localtime è un collegamento simbolico che punta a un file in /usr/share/zoneinfo/Continent/City. Modificando il punto in cui punti è possibile modificare il fuso orario.

Per cambiare il fuso orario, rimuovere il /etc/localtime e assegnare un collegamento simbolico alla città desiderata. Per esempio, ls -l /etc/localtime segnala che questo file punta a /usr/share/zoneinfo/America/Denver. Per cambiarlo a New York, lo faccio

  1. sudo rm /etc/localtime
  2. sudo ln -s /usr/share/zoneinfo/America/New_York /etc/localtime
  3. Aspetta un attimo che il mio orologio si aggiorni

Lo screenshot qui sotto mostra i passaggi e la conferma da timedatectl

enter image description here


10
2018-05-06 02:21



è bello capire cosa sta succedendo dietro il sipario, ma non pensi che sarebbe meglio suggerire gli strumenti designati per questo come dpkg-reconfigure tzdata ecc.? - Patrick Cornelissen
@PatrickCornelissen Prima di tutto, ci sono risposte per tzdata già, quindi suggerire la stessa cosa è inutile. Secondo, tzdata fa più o meno lo stesso. Spetta all'utente decidere cosa preferiscono, quindi non è né meglio né peggio - solo la preferenza di una persona. - Sergiy Kolodyazhnyy
Beh, lavorare "contro" gli strumenti di distribuzione porta spesso a problemi, quindi eviterei il tuo approccio se possibile, ma equamente la tua soluzione funzionerebbe (al momento) - Patrick Cornelissen
Questa soluzione, a quanto ho capito, funziona su diverse distribuzioni. Ma ha ancora bisogno del database del fuso orario disponibile nella directory / usr / share / zoneinfo. C'è un modo per ottenere il database del fuso orario senza installare il pacchetto tzdata? - andho
@ e da allora /var/lib/dpkg/info/tzdata.list suggerisce che tutti gli elementi in /usr/share/zoneinfo vieni con quel pacchetto, suppongo che tu abbia bisogno di installare il pacchetto per avere tutti gli elementi, ma francamente non ne sono abbastanza sicuro, in più non ho familiarità con come funziona su altre distribuzioni. Prendi in considerazione questa domanda come una domanda Unix e Linuxe sentiti libero di fare riferimento a questo post se vuoi fornire un contesto per la domanda. - Sergiy Kolodyazhnyy


Il modo semplice per aggiornare il fuso orario è quello di utilizzare sudo dpkg-reconfigure tzdata. Ma questo non è facilmente sceneggiabile.

Se si desidera impostare il fuso orario in modo esplicito tramite uno script (ad esempio per l'impostazione di una macchina virtuale), ecco una ricetta:

Imposta una variabile per il fuso orario desiderato, ad es. uno di

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

I valori validi sono le directory e i nomi di file sotto /usr/share/zoneinfo.

Quindi semplicemente

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

Nota che entrambi /etc/localtime e /etc/timezone deve essere coerente

Probabilmente ora riavviare per ottenere anche tutti i servizi aggiornati (ad esempio cron).


10
2018-05-13 18:13



-1: non usare mai cp per impostare / etc / localtime. / etc / localtime è un link simbolico al file corretto. Se usi cp per cambiarlo, in realtà copierete il contenuto di qualsiasi file tzdata al quale si sta puntando, così all'improvviso (per esempio) il file tzdata UTC contiene i dati del fuso orario per Europa / Londra invece di UTC, il che è male (e fastidioso per la risoluzione dei problemi, come posso dire per esperienza personale) - Foogod


Ecco il metodo che uso, che è incentrato sugli Stati Uniti in quanto non devo preoccuparmi dei fusi orari non statunitensi.

Se ho bisogno di determinare il fuso orario corrente, o lo faccio:

cat /etc/timezone  

o

sudo hwclock --show  

Allora faccio:

timedatectl set-timezone <_designation_>

dove <_designation_> è uno dei seguenti:

US / Eastern
US / Centrale
US / Mountain
US / Pacific
US / Alaska
US / Aleutian
US / Arizona
US / Est-Indiana
US / Hawaii
US / Indiana-Starke
USA / Michigan
US / Pacific-Nuovo
US / Samoa

PER ESEMPIO.:

timedatectl set-timezone US/Eastern  

Altre designazioni del fuso orario possono essere trovate qui: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones


3
2018-03-29 19:04





Non è possibile farlo a meno che non si selezioni il file del fuso orario che si desidera corrispondere a ciascun offset del fuso orario.

Alcune risposte suggeriscono di usare i file in / usr / share / zoneinfo / Etc, ma il problema con questi è che sono agnostici di DST.

Quindi, a meno che non si scelga una configurazione del fuso orario per corrispondere a ciascun offset, o se non si cura dell'ora legale, non c'è modo di farlo genericamente.


0
2017-08-23 17:52