Impostazione del fuso orario dal terminale


210

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 c'è un modo per impostare il fuso orario con solo l'offset, ad esempio -1 o +5 ecc?

Devo farlo mentre sto scrivendo un'applicazione per regolare l'ora o i registri dei rapporti e l'unica informazione che ho è l'IP dell'utente. Posso usare una webapp per trovare la posizione dell'IP, ma poi devo impostare l'offset che sarebbe facile SE potrei semplicemente ottenere l'offset della posizione, ma se ho bisogno di trovare la zona e la città sarebbe un vero dolore .

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


Aiutateci a raccogliere la risposta accettata. Penso che la risposta di @ Mitch sia la migliore askubuntu.com/a/323163/22308
Nam G VU

1
@NamGVU No, Mitch's non è la soluzione migliore, è una risposta "GUI in un terminale". Perfino l'OP ha detto "questo non funzionerà perché ho bisogno di escludere il fuso orario da un programma senza l'input dell'utente Ho bisogno di un comando che posso inserire nel terminale non nella soluzione gui" , e questo è lo stesso obiettivo che la maggior parte vorrebbe quando cerchi una "soluzione terminale, "facile da usare. Di Collin Anderson è meglio se conosci una città, o di Ryan per il semplice GMT + -n
Xen2050

In Ubuntu 18.04, tzselect non apre una GUI. Ha una selezione di menu basata su terminali.
Tim Richardson,

Risposte:


321

Per cambiare fuso orario dal terminale, basta premere Ctrl+ Alt+ Tsulla tastiera per aprire Terminale. Quando si apre, esegui i seguenti comandi:

sudo dpkg-reconfigure tzdata

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


14
questo non funzionerà come ho bisogno di altr di fuso orario da un programma senza input dell'utente ho bisogno di un comando che posso inserire nel terminale non soluzione gui grazie per la risposta
user2155009

1
grazie!!! questo aiuta, sono già cambiato manualmente etc / timezone =) come php.net/manual/en/timezones.php !!! assolutamente identico !!!
Vladimir Ch,

La riconfigurazione di tzdata sembra regolare anche l'orologio hardware in modo che l'ora visualizzata rimanga invariata dopo il cambio di fuso orario. Potresti volerlo se l'orario era corretto ma il fuso orario era sbagliato. Tuttavia, sicuramente non vuoi toccare l'orologio hardware mentre viaggi. L' approccio timedatectl sembra cambiare solo il fuso orario.
SnakE

@SnakE per me ha mostrato che l'ora cambia di conseguenza
RiaD

l'ho cambiato da stucco da riga di comando senza alcun problema perché l'hai detto amico mio? @ADTC
sabre tabatabaee yazdi

170

È inoltre possibile utilizzare il nuovo timedatectlper impostare l'ora in 14.04.

sudo timedatectl set-timezone America/New_York

Come lo installi su Ubuntu?
Division by Zero,

1
È installato di default il 14.04.
Collin Anderson,

6
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.) Ulteriori informazioni su posixe rightprefissi sono qui .
ADTC

Questo funziona! ...
Dan Nissenbaum,

3
Utilizzare sudo timedatectl set-timezone Etc/UTCper UTC.
Zoltán,

19

È possibile utilizzare i file GMT ± x in /usr/share/zoneinfo/Etc.

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

grazie assegnazione per la risposta sto ottenendo un errore ln: impossibile creare il collegamento simbolico `/ etc / localtime ': il file esiste oboiusly non sono sicuro di cosa sto facendo sai di buon tutorial per questo o anche alcune parole chiave che posso google grazie sono io usando il comando correttamente? sto usando sudo ln / usr / share / zoneinfo / Etc / GMT $ + 1 / etc / localtime per impostare l'orologio su + 1gmt
user2155009

9
minitech ha dimenticato la bandiera della forza immagino di sì -> sudo ln -sf ....
Tele

1
Questo funzionerà in qualche modo, ma non aggiornerà il nome tz in /etc/timezone.
poolie,

1
Per ottenere il fuso orario / etc /, eseguisudo dpkg-reconfigure --frontend noninteractive tzdata
Pierre Gramme il

17

Mi rendo conto che questo thread è un po 'datato, ma stavo cercando una soluzione migliore perché avevo bisogno di impostare automaticamente il fuso orario in una VM dopo che un utente lo scarica dal nostro sito Web e lo distribuisce. 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 avviato sulla nuova rete (il mio script controlla la connettività per prima cosa) e quindi imposta il fuso orario del server in base alla risposta.

"Wget -q0 -" dice a wget di produrre solo i risultati su stdout che viene quindi reindirizzato alla variabile $ tz.

Spero che aiuti qualcuno!


1
Grande! Su Ubuntu 16.04 dovrebbe invece essere "grep zone" e "print $ 3".
user334639

Propongo un cli diverso 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

11

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

Per modificare il fuso orario, rimuovere /etc/localtimee assegnare il collegamento simbolico alla città desiderata. Ad esempio, ls -l /etc/localtimesegnala 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 minuto per il mio orologio per essere aggiornato

La schermata qui sotto mostra i passaggi e la conferma da timedatectl

inserisci qui la descrizione dell'immagine


è 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 tzdatagià delle risposte , quindi suggerire che la stessa cosa sia inutile. Secondo, tzdatafa praticamente lo stesso. Sta all'utente decidere cosa preferisce, quindi non è né meglio né peggio: solo la preferenza di una persona.
Sergiy Kolodyazhnyy,

1
Bene, lavorare "contro" gli strumenti di distribuzione spesso porta a problemi, quindi eviterei il tuo approccio, se possibile, ma abbastanza equo la tua soluzione funzionerebbe (attualmente)
Patrick Cornelissen,

Questa soluzione, a quanto ho capito, funziona attraverso diverse distribuzioni. Ma necessita ancora 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,

@andho Dato /var/lib/dpkg/info/tzdata.listche suggerisce che tutti gli articoli /usr/share/zoneinfosono inclusi in quel pacchetto, suppongo che sia necessario installare il pacchetto per avere tutti gli articoli, ma francamente non ne sono abbastanza sicuro, inoltre non ho abbastanza familiarità con come funziona su altri distribuzioni. Considera di porre questa domanda come una domanda su Unix e Linux e sentiti libero di fare riferimento a questo post se vuoi fornire un contesto alla domanda.
Sergiy Kolodyazhnyy

10

Il modo più semplice per aggiornare il fuso orario è usare sudo dpkg-reconfigure tzdata. Ma questo non è così facile da script.

Se vuoi impostare esplicitamente il fuso orario tramite uno script (ad es. Per impostare una macchina virtuale), ecco una ricetta:

Impostare una variabile per il fuso orario desiderato, ad esempio uno di

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

I valori validi sono le directory e i nomi dei file in /usr/share/zoneinfo.

Quindi semplicemente

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

Si noti che entrambi /etc/localtimee /etc/timezonedevono essere coerenti.

Probabilmente ora riavvia per aggiornare anche tutti i tuoi servizi (es. Cron).


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

5

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

Se devo determinare il fuso orario corrente, eseguo una delle due operazioni:

cat /etc/timezone  

o

sudo hwclock --show  

Quindi faccio:

timedatectl set-timezone <_designation_>

dove <_designation_>è uno dei seguenti:

Stati Uniti / Stati
Uniti orientali / Stati Uniti centrali / Stati
Uniti di montagna / Stati
Uniti del Pacifico / Stati
Uniti dell'Alaska / Stati
Uniti dell'Aleutia
/ Stati
Uniti dell'Arizona / Stati Uniti dell'Est / Indiana
/ Hawaii
Stati Uniti / Indiana-Starke
Stati Uniti / Stati
Uniti del Michigan / Nuovi
Stati del Pacifico / Samoa

PER ESEMPIO:

timedatectl set-timezone US/Eastern  

Altre denominazioni del fuso orario sono disponibili qui: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones


tzselectè un buon modo per ottenere la stringa del fuso orario
Martin Thoma,

0

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 è che sono indipendenti dall'ora legale.

Quindi, a meno che non si scelga una configurazione del fuso orario che corrisponda a ciascun offset o non ci si preoccupi dell'ora legale, non c'è modo di farlo genericamente.

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.