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

Hoe controleer ik welke tijdzone in Linux?

Is er een manier om te controleren in welke tijdzone ik me momenteel bevind op Linux?

Antwoorden (12)

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

Als je bedoelt vanuit de console, typ dan gewoon:

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

Als u de numerieke tijdzone wilt:

date +'%:z %Z'

Voorbeeldweergave:

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

Ik wilde de tijdzone vinden in “US/Eastern” of “Europa/Londen” vorm. Je kan dit vinden in:

  • /etc/timezone (aanwezig op Ubuntu en Red Hat? maar niet op Amazon Linux)
  • (op Red Hat stijl systemen) als ZONE="US/Eastern" in /etc/sysconfig/clock
  • of je kan proberen /etc/localtime te matchen met één van de bestanden onder /usr/share/zoneinfo; vervelend genoeg lijkt dit geen symlink te zijn, maar je kan dit bijvoorbeeld wel doen.
21
21
21
2011-07-11 04:59:58 +0000

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.

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

Voor ubuntu probeer dit :

$ cat /etc/timezone

Monsteruitgang :

Asia/Kolkata

Voor andere distro Referentie : https://unix.stackexchange.com/questions/110522/timezone-setting-in-linux

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

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
4
4
4
2015-07-22 04:58:52 +0000
$ strings /etc/localtime | tail -n 1
MST7MDT,M3.2.0,M11.1.0

Dus ik ben op Mountain Time. Hoewel de bovenstaande adviezen over het gebruik van omgevingsvariabele of gewoon datumcommando-uitvoer soms beter werken, afhankelijk van hoe je dat wilt gebruiken.

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

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

http://wiki.archlinux.org/index.php/time#Time_zone

1
1
1
2018-04-16 15:36:04 +0000

Een paar oplossingen:

date +"%Z %z"
timedatectl | grep "Time zone"
cat /etc/timezone

gaf me (respectievelijk):

UTC +0000
Time zone: Etc/UTC (UTC, +0000)
Etc/UTC

Mijn computer staat op UTC.

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

U kunt de datum en de tijdzone tegelijkertijd tonen:

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

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 .

0
0
0
2017-11-15 00:31:57 +0000

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