Hoe controleer ik welke tijdzone in Linux?
Is er een manier om te controleren in welke tijdzone ik me momenteel bevind op Linux?
Is er een manier om te controleren in welke tijdzone ik me momenteel bevind op Linux?
Als u de numerieke tijdzone wilt:
date +'%:z %Z'
Voorbeeldweergave:
-05:00 EST
Ik wilde de tijdzone vinden in “US/Eastern” of “Europa/Londen” vorm. Je kan dit vinden in:
ZONE="US/Eastern"
in /etc/sysconfig/clock Meestal vertelt de TZ
omgevingsvariabele u iets nuttigs. Het is echter het beste om functies als mktime()
en localtime()
te gebruiken om te converteren tussen time_t
en een lokale tijdzone-representatie. Dat wil zeggen, probeer de conversie niet zelf te doen.
Voor ubuntu probeer dit :
$ cat /etc/timezone
Monsteruitgang :
Asia/Kolkata
Voor andere distro Referentie : https://unix.stackexchange.com/questions/110522/timezone-setting-in-linux
Soms bent u op zoek naar de canonieke tijdzone in plaats van de korte vorm zoals die door date %Z
wordt geproduceerd, bijvoorbeeld US/Eastern
. Op systemen met timedatectl
b.v. Fedora, voert timedatectl
veel nuttige informatie uit, inclusief de huidige zone:
# 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
Helaas neemt timedatectl
set-timezone
als commando, maar heeft geen corresponderend get-timezone
. Parseer het als volgt:
# timedatectl status | grep "zone" | sed -e 's/^[]*Time zone: \(.*\) (.*)$//g'`
US/Eastern
Voor de tijdzone kunt u gebruik maken van geolocatie:
$ curl https://ipapi.co/timezone
America/Chicago
of:
$ curl http://ip-api.com/line?fields=timezone
America/Chicago
U kunt de datum en de tijdzone tegelijkertijd tonen:
date +'%d/%m/%Y %H:%M:%S [%:z %Z]'
Soms werkt timedatectl set-timezone
/etc/timezone
niet bij, dus het is het beste om de tiemzone te halen uit de naam van het bestand waar de symlink /etc/timezone
naar verwijst:
#!/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
Referenties: in dit antwoord .
Het gebruik van TZ of datum is NIET VERPLICHT omdat het de tijdzone van de GEBRUIKER aangeeft, niet de standaard systeemtijdzone.
De standaard systeemtijdzone wordt opgeslagen in /etc/tijdzone (wat vaak een symbolische link is naar het tijdzone-gegevensbestand dat specifiek is voor de tijdzone). Als u geen /etc/timezone heeft, kijk dan naar /etc/localtime. Over het algemeen is dat de “server” tijdzone. /etc/localtime is vaak een symlink naar een tijdzonebestand in /usr/share/zoneinfo. Dat pad naar het juiste tijdzonebestand zal je vaak ook geografische informatie geven.
Nieuwere linux hebben “timedatectl” wat je veel informatie geeft als het commando wordt uitgevoerd.
(als een side-node, als je een oud systeem hebt dat nog steeds de OLD hard-coded timezones gebruikt, kun je er waarschijnlijk een modern tijdzonebestand naartoe kopiëren en het zal werken. Ik heb dit vele malen moeten doen om de veranderende tijdzones op oudere apparatuur op te lossen).