2011-07-11 04:57:39 +0000 2011-07-11 04:57:39 +0000
135
135

Come controllare quale fuso orario in Linux?

C'è un modo per controllare in quale fuso orario mi trovo attualmente su Linux?

Risposte (12)

252
252
252
2011-07-11 05:01:26 +0000

Se si intende dalla console, basta digitare:

date +%Z
58
58
58
2015-02-13 16:22:27 +0000

Se si desidera il fuso orario numerico:

date +'%:z %Z'

Uscita campione:

-05:00 EST
26
26
26
2013-08-31 09:58:18 +0000

Volevo invece trovare il fuso orario in forma “US/Eastern” o “Europa/Londra”. Potete trovarlo in:

  • /etc/timezone (presente su Ubuntu e Red Hat? ma non ad es. su Amazon Linux)
  • (sui sistemi stile Red Hat) come ZONE="US/Eastern" in /etc/sysconfig/clock
  • oppure potete provare ad abbinare /etc/localtime ad uno dei file sotto /usr/share/zoneinfo; fastidiosamente questo non sembra essere un collegamento simbolico, ma potete ad es.
21
21
21
2011-07-11 04:59:58 +0000

Di solito, la variabile d'ambiente TZ vi dirà qualcosa di utile. Tuttavia, è meglio utilizzare funzioni come mktime() e localtime() per convertire tra time_t e una rappresentazione locale del fuso orario. Cioè, non cercate di fare la conversione da soli.

13
13
13
2016-05-10 10:50:27 +0000

Per ubuntu provare questo :

$ cat /etc/timezone
``` ```
Asia/Kolkata

Uscita campione :

&001 &001

Per altre distro Riferimento : https://unix.stackexchange.com/questions/110522/timezone-setting-in-linux

7
7
7
2016-09-13 21:16:56 +0000

A volte si può cercare il fuso orario canonico piuttosto che la forma breve come prodotto da date %Z, ad esempio US/Eastern. Nei sistemi con timedatectl, ad esempio Fedora, timedatectl fornisce molte informazioni utili, compresa 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

Purtroppo, timedatectl prende set-timezone come comando, ma non ha il corrispondente get-timezone. Analizzarlo come segue:

# timedatectl status | grep "zone" | sed -e 's/^[]*Time zone: \(.*\) (.*)$//g'`
US/Eastern
4
4
4
2015-07-22 04:58:52 +0000
$ strings /etc/localtime | tail -n 1
MST7MDT,M3.2.0,M11.1.0

So I’m on Mountain Time. Anche se i consigli di cui sopra sull'uso della variabile d'ambiente o solo del comando data in uscita a volte funzionano meglio, a seconda di come si vuole usare.

3
3
3
2018-07-01 14:02:51 +0000

Per il fuso orario, è possibile utilizzare la geolocalizzazione:

$ curl https://ipapi.co/timezone
America/Chicago

o:

$ curl http://ip-api.com/line?fields=timezone
America/Chicago
``` &001 
[ http://wiki.archlinux.org/index.php/time#Time\_zone ](http://wiki.archlinux.org/index.php/time#Time_zone)
1
1
1
2018-04-16 15:36:04 +0000

Un paio di soluzioni:

date +"%Z %z"
timedatectl | grep "Time zone"
cat /etc/timezone
``` ```
UTC +0000
Time zone: Etc/UTC (UTC, +0000)
Etc/UTC

mi hanno dato (rispettivamente):

&001 &001

Il mio computer è su UTC.

0
0
0
2018-08-05 07:51:54 +0000

È possibile mostrare la data e il fuso orario contemporaneamente:

date +'%d/%m/%Y %H:%M:%S [%:z %Z]'
0
0
0
2018-06-26 06:54:56 +0000

A volte timedatectl set-timezone non aggiorna /etc/timezone , quindi è meglio ottenere il tiemzone dal nome del file che il symlink /etc/timezone punta a:

#!/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
0
0
2017-11-15 00:31:57 +0000

L'uso della TZ o della data NON E’ AFFIDABILE perché indica il fuso orario dell'UTENTE, non il fuso orario di sistema predefinito.

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 avete un /etc/timezone, guardate /etc/localtime. Generalmente è il fuso orario del “server”. /etc/localtime è spesso un collegamento simbolico ad un file del fuso orario in /usr/share/zoneinfo. Il percorso del file del fuso orario corretto vi darà spesso anche informazioni geografiche.

I linux più recenti hanno “timedatectl” che vi dà tonnellate di informazioni quando il comando viene eseguito.

(come side-node, se avete un sistema antico che usa ancora i fusi orari OLD hard-coded, probabilmente potete copiare un file di fuso orario moderno su di esso e funzionerà. Ho dovuto farlo molte volte per risolvere il problema del cambio di fuso orario su apparecchiature più vecchie).