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

Come controllare quale fuso orario in Linux?

Advertisement

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

Advertisement
Advertisement

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
Advertisement
26
26
2013-08-31 09:58:18 +0000
Advertisement

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
Advertisement
13
13
2016-05-10 10:50:27 +0000
Advertisement

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
Advertisement
4
4
2015-07-22 04:58:52 +0000
Advertisement
$ 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
Advertisement
1
1
2018-04-16 15:36:04 +0000
Advertisement

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).

Advertisement

Domande correlate

6
10
5
37
2
Advertisement
Advertisement