Come controllare quale fuso orario in Linux?
C'è un modo per controllare in quale fuso orario mi trovo attualmente su Linux?
C'è un modo per controllare in quale fuso orario mi trovo attualmente su Linux?
Se si desidera il fuso orario numerico:
date +'%:z %Z'
Uscita campione:
-05:00 EST
Volevo invece trovare il fuso orario in forma “US/Eastern” o “Europa/Londra”. Potete trovarlo in:
ZONE="US/Eastern"
in /etc/sysconfig/clock 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.
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
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
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)
È possibile mostrare la data e il fuso orario contemporaneamente:
date +'%d/%m/%Y %H:%M:%S [%:z %Z]'
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 .
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).