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

Comment vérifier quel fuseau horaire sous Linux ?

Advertisement

Y a-t-il un moyen de vérifier dans quel fuseau horaire je me trouve actuellement sous Linux ?

Advertisement
Advertisement

Réponses (12)

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

Si vous voulez dire depuis la console, tapez simplement :

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

Si vous voulez le fuseau horaire numérique :

date +'%:z %Z'

Exemple de sortie :

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

Je voulais plutôt trouver le fuseau horaire sous la forme “US/Eastern” ou “Europe/Londres”. Vous pouvez trouver cela dans :

  • /etc/timezone (présent sur Ubuntu et Red Hat ? mais pas par exemple Amazon Linux)
  • (sur les systèmes de style Red Hat) comme ZONE="US/Eastern" dans /etc/sysconfig/clock
  • ou vous pouvez essayer de faire correspondre /etc/localtime à l'un des fichiers sous /usr/share/zoneinfo ; ennuyeusement, cela ne semble pas être un lien symbolique, mais vous pouvez par exemple
21
21
21
2011-07-11 04:59:58 +0000

Habituellement, la variable d'environnement TZ vous dira quelque chose d'utile. Cependant, il est préférable d'utiliser des fonctions telles que mktime() et localtime() pour convertir entre time_t et une représentation locale du fuseau horaire. Autrement dit, n'essayez pas de faire la conversion vous-même.

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

Pour ubuntu essayez ceci :

$ cat /etc/timezone

Sample output :

Asia/Kolkata

Pour d'autres distributions Référence : https://unix.stackexchange.com/questions/110522/timezone-setting-in-linux

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

Parfois, vous pouvez rechercher le fuseau horaire canonique plutôt que la forme courte telle que produite par date %Z, par exemple US/Eastern. Sur les systèmes avec timedatectl par exemple Fedora, timedatectl produit beaucoup d'informations utiles, y compris la zone actuelle :

# 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

Malheureusement, timedatectl prend set-timezone comme commande, mais n'a pas de get-timezone correspondant. L'analyser comme suit :

# 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

Je suis donc sur Mountain Time. Bien que les conseils ci-dessus sur l'utilisation des variables d'environnement ou simplement de la sortie des commandes de date fonctionnent parfois mieux, selon l'utilisation que vous voulez en faire.

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

Pour le fuseau horaire, vous pouvez utiliser la géolocalisation :

$ curl https://ipapi.co/timezone
America/Chicago

Ou :

$ curl http://ip-api.com/line?fields=timezone
America/Chicago

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

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

Quelques solutions :

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

m'a donné (respectivement) :

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

Mon ordinateur est sur UTC.

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

Vous pouvez afficher la date et le fuseau horaire simultanément :

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

Parfois timedatectl set-timezone ne met pas à jour /etc/timezone , il est donc préférable d'obtenir la tiemzone à partir du nom du fichier vers lequel le lien symbolique /etc/timezone pointe :

#!/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

Références : dans cette réponse .

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

L'utilisation de TZ ou de la date N'EST PAS FIABLE car elle vous indique le fuseau horaire de l'UTILISATEUR, et non le fuseau horaire par défaut du système.

Le fuseau horaire par défaut du système est stocké dans /etc/timezone (qui est souvent un lien symbolique vers le fichier de données spécifique au fuseau horaire). Si vous n'avez pas de /etc/timezone, consultez /etc/localtime. Il s'agit généralement du fuseau horaire du “serveur”. /etc/localtime est souvent un lien symbolique vers un fichier de fuseau horaire dans /usr/share/zoneinfo. Ce chemin vers le bon fichier de fuseau horaire vous donnera aussi souvent des informations géographiques.

Les linux plus récents ont “timedatectl” qui vous donne des tonnes d'informations lorsque la commande est exécutée.

(en marge, si vous avez un ancien système qui utilise encore les anciens fuseaux horaires codés en dur, vous pouvez probablement y copier un fichier de fuseau horaire moderne et cela fonctionnera. J'ai dû faire cela à de nombreuses reprises pour résoudre le problème des changements de fuseau horaire sur des équipements plus anciens).

Advertisement

Questions connexes

6
10
5
37
11
Advertisement
Advertisement