Come verificare quale fuso orario in Linux?


Risposte:


19

Di solito, la TZvariabile d'ambiente ti dirà qualcosa di utile. Tuttavia, è meglio utilizzare funzioni come mktime()e localtime()per convertire tra time_te una rappresentazione locale del fuso orario. Cioè, non provare a fare la conversione da solo .


2
c'è qualche comando che dice sul fuso orario in cui si trova l'utente?

26
Certo, te datelo dirò.
Greg Hewgill,

ho due istanze del server, se do il comando "date" in entrambi i server, mostra un orario diverso. il fuso orario per entrambi i server è IST, ora di un server: lun 11 lug 10:39:31 IST 2011 e altri server lun 11 lug 10:35:31 IST 2011 .. c'è una differenza di 4 minuti

8
In Precise Pangolin echo $TZnon restituisce nulla per me.
Iain Samuel McLean Elder il

3
@GregHewgill la tua risposta non è utile a prima vista. Valuta di modificare la tua risposta, per favore. Vedi la risposta più votata di seguito. Per il momento, declasserò la tua risposta. Inoltre non c'è TZ env su default sui miei computer.
therealmarv,

244

Se vuoi dire dalla console, basta digitare:

date +%Z

2
bene, funziona bene.
Silver Moon,

15
questa dovrebbe essere la risposta accettata
KalenGi

buon punto ... ha cambiato la risposta in tal senso
Rasman

E per impostare il fuso orario dalla riga di comando in Ubuntu, il seguente link fornisce il banale comando a 1 riga per farlo: askubuntu.com/a/524362/182454
Dan Nissenbaum,

Questo +07mi dà . Per accedere Region/Citya un Linux basato su Debian / Arch, vedere questa risposta .
Tom Hale,

54

Se vuoi il fuso orario numerico:

date +'%:z %Z'

Uscita campione:

-05:00 EST

7
Su OS X questo genera:z EST
sospetto

7
Questo se per Linux .
Paul Vargas,

1
Più precisamente, questo vale per GNU date. La versione di BusyBox stampa qualcosa di non sensato, "%: z CEST" nel mio caso.
Léo Lam,

Tuttavia, date +% z funziona perfettamente su OS X. Ti suggerisco di modificare la risposta.
Neil Mayhew,

1
Ciao, @NeilMayhew Grazie! Humm ... ma la domanda ha i taglinux ubuntu-10.04
Paul Vargas,

24

Volevo trovare il fuso orario nella forma "USA / Est" o "Europa / Londra". Puoi trovarlo in:

  • / etc / timezone (presente su Ubuntu e Red Hat? ma non ad esempio Amazon Linux)
  • (su sistemi in stile Red Hat) come ZONE="US/Eastern"in / etc / sysconfig / clock
  • oppure puoi provare a far corrispondere / etc / localtime a uno dei file in / usr / share / zoneinfo; fastidiosamente questo non sembra essere un collegamento simbolico, ma puoi ad es

    cd / usr / share / zoneinfo
    find * -type f -exec sh -c "diff -q / etc / localtime '{}'> / dev / null && echo {}" \;

    per trovare i file corrispondenti - probabilmente ci sono modi migliori per farlo, ma funziona. Ci saranno più partite.


4
find /usr/share/zoneinfo/ -type f| xargs md5sum | grep $(md5sum /etc/localtime | cut -d' ' -f1)
Freiheit,


6

A volte potresti cercare il fuso orario canonico piuttosto che la forma abbreviata prodotta da date %Zes US/Eastern. Sui sistemi con timedatectlad es. Fedora, timedatectlgenera molte informazioni utili, inclusa la zona corrente:

# timedatectl
      Local time: Tue 2016-09-13 17:10:26 EDT
  Universal time: Tue 2016-09-13 21:10:26 UTC
        RTC time: Tue 2016-09-13 21:10:26
       Time zone: US/Eastern (EDT, -0400)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

Sfortunatamente, timedatectlprende set-timezonecome comando, ma non ha corrispondenti get-timezone. Analizzalo come segue:

# timedatectl status | grep "zone" | sed -e 's/^[ ]*Time zone: \(.*\) (.*)$/\1/g'`
US/Eastern

4
$ strings /etc/localtime | tail -n 1
MST7MDT,M3.2.0,M11.1.0

Quindi sono in Mountain Time. Anche se i consigli sopra riportati sull'uso della variabile d'ambiente o sull'output del comando date date a volte funzionano meglio, a seconda di come si desidera utilizzarlo.



2
  • / etc / sysconfig / clock imposta se l'orologio hardware è memorizzato come UTC o ora locale.
  • Symlink / etc / localtime a / usr / share / zoneinfo / ... per impostare il fuso orario.
  • Digitare /sbin/hwclock --systohc [--utc]per impostare l'orologio hardware.

Il kernel di Linux memorizza e calcola sempre il tempo come il numero di secondi dalla mezzanotte del 1 ° gennaio 1970 UTC indipendentemente dal fatto che il tuo orologio hardware sia memorizzato come UTC o meno. Le conversioni all'ora locale vengono eseguite in fase di esecuzione. Una cosa interessante di questo è che se qualcuno sta usando il tuo computer da un fuso orario diverso, può impostare la variabile di ambiente TZ e tutte le date e gli orari appariranno corretti per il loro fuso orario.

Se il numero di secondi dal 1 ° gennaio 1970 UTC è memorizzato come un intero con segno a 32 bit (come sul tuo sistema Linux / Intel), il tuo orologio smetterà di funzionare nell'anno 2038. Linux non ha alcun problema intrinseco Y2K , ma ha un problema dell'anno 2038. Spero che avremo tutti Linux su sistemi a 64 bit a quel punto. I numeri interi a 64 bit manterranno i nostri orologi abbastanza bene fino all'incirca nell'anno 292271 milioni.


1

Un paio di soluzioni:

date +"%Z %z"
timedatectl | grep "Time zone"
cat /etc/timezone

mi ha dato (rispettivamente):

UTC +0000
Time zone: Etc/UTC (UTC, +0000)
Etc/UTC

Il mio computer è su UTC.


0

L'uso di TZ o date NON È AFFIDABILE perché indica il fuso orario dell'utente, non il fuso orario predefinito del sistema.

Il fuso orario di sistema predefinito è memorizzato in / etc / timezone (che è spesso un collegamento simbolico al file di dati del fuso orario specifico del fuso orario). Se non hai un / etc / timezone, guarda / etc / localtime. Generalmente si tratta del fuso orario del "server". / etc / localtime è spesso un collegamento simbolico a un file di fuso orario in / usr / share / zoneinfo. Questo percorso per il file del fuso orario corretto ti fornirà spesso anche informazioni geografiche.

Linux più recenti hanno "timedatectl" che ti dà tonnellate di informazioni quando il comando viene eseguito.

(come nodo laterale, se hai un sistema antico che utilizza ancora i vecchi fusi orari codificati, probabilmente puoi copiare un moderno file del fuso orario su di esso e funzionerà. Ho dovuto farlo molte volte per risolvere il cambiamento dei fusi orari su apparecchiature più vecchie).


0

A volte timedatectl set-timezonenon si aggiorna/etc/timezone , quindi è meglio ottenere tiemzone dal nome del file a cui /etc/timezonepunta il collegamento simbolico :

#!/bin/bash
set -euo pipefail

if filename=$(readlink /etc/localtime); then
    # /etc/localtime is a symlink as expected
    timezone=${filename#*zoneinfo/}
    if [[ $timezone = "$filename" || ! $timezone =~ ^[^/]+/[^/]+$ ]]; then
        # not pointing to expected location or not Region/City
        >&2 echo "$filename points to an unexpected location"
        exit 1
    fi
    echo "$timezone"
else  # compare files by contents
    # https://stackoverflow.com/questions/12521114/getting-the-canonical-time-zone-name-in-shell-script#comment88637393_12523283
    find /usr/share/zoneinfo -type f ! -regex ".*/Etc/.*" -exec \
        cmp -s {} /etc/localtime \; -print | sed -e 's@.*/zoneinfo/@@' | head -n1
fi

Riferimenti: in questa risposta .


0

Puoi mostrare contemporaneamente la data e il fuso orario:

date +'%d/%m/%Y  %H:%M:%S [%:z  %Z]'
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.