In questo commento di Stéphane Chazelas, ha detto:
timedatectl
è unsystemd
cosa che interrogatimedated
oltredbus
etimedated
deriva il nome del fuso orario (comeEurope/London
) eseguendo unreadlink()
il/etc/localtime
. Se/etc/localtime
non è un collegamento simbolico, quel nome non può essere derivato poiché quei file di definizione del fuso orario non contengono tali informazioni.
Sulla base di questo e del commento di tonioc, ho messo insieme quanto segue:
#!/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 '[email protected]*/zoneinfo/@@' | head -n1
fi
Per il fuso orario, puoi utilizzare la geolocalizzazione:
$ curl https://ipapi.co/timezone
America/Chicago
Oppure:
$ curl http://ip-api.com/line?fields=timezone
America/Chicago
http://wiki.archlinux.org/index.php/time#Time_zone