Réglage du fuseau horaire sous Linux [fermé]

157

Je configure le fuseau horaire sur GMT + 6 sur ma machine Linux en copiant le fichier zoneinfo dans /etc/localtime, mais la datecommande indique toujours l'heure UTCtime-6. Quelqu'un peut-il m'expliquer ce comportement?

Je suppose que la datecommande devrait afficher l' UTCtime+6heure. Voici les étapes que je suis:

date
Wed Jan 22 17:29:01 IST 2014

date -u
Wed Jan 22 11:59:01 UTC 2014

cp /usr/share/zoneinfo/Etc/GMT+6 /etc/localtime

date
Wed Jan 22 05:59:21 GMT+6 2014

date -u
Wed Jan 22 11:59:01 UTC 2014
Rahul Dhobi
la source
La variable d'environnement TZ a-t-elle été définie ( echo $TZproduit-elle autre chose qu'une ligne vide)? En outre, il serait peut-être préférable de créer un lien symbolique au /etc/localtimelieu de copier le fichier lui-même (de cette manière, vous serez en sécurité si les données zoneinfo changent sans jamais le devenir).
Sami Laine
Quelle est la distribution? Différentes distributions gèrent cela différemment!
slm
@slm: J'utilise Ubuntu 12.04
Rahul Dhobi
Vous ne connaissiez probablement pas cette politique, mais vous n'êtes pas censé poster les mêmes questions sur les différents sites SE. stackoverflow.com/questions/21282367/timezone-setting-in-linux
slm
2
"Cette question a été postée sur plusieurs sites" Hein, c'est un nouveau pour moi. Jamais rencontré un site SE avec une raison proche comme ça. Quoi qu'il en soit, c'est la première question qui se pose sur Google lors de la recherche de la modification d'un fuseau horaire sous Linux. Il s'agit de la question la plus votée parmi toutes celles que j'ai vues. Elle devrait donc peut-être être rouverte?
Ajedi32

Réponses:

273

Jetez un coup d’œil à ce billet de blog intitulé: Comment: 2 méthodes pour changer de fuseau horaire dans Linux .

Distributions Red Hat

Si vous utilisez une distribution telle que Red Hat, votre approche de la copie du fichier serait généralement acceptable.

NOTE: Si vous cherchez une solution distro-agnostique, cela fonctionne également sur Debian, bien qu'il existe des approches plus simples ci-dessous si vous devez vous préoccuper uniquement des machines Debian.

$ ls /usr/share/zoneinfo/
Africa/      CET          Etc/         Hongkong     Kwajalein    Pacific/     ROK          zone.tab
America/     Chile/       Europe/      HST          Libya        Poland       Singapore    Zulu
Antarctica/  CST6CDT      GB           Iceland      MET          Portugal     Turkey       
Arctic/      Cuba         GB-Eire      Indian/      Mexico/      posix/       UCT          
Asia/        EET          GMT          Iran         MST          posixrules   Universal    
Atlantic/    Egypt        GMT0         iso3166.tab  MST7MDT      PRC          US/          
Australia/   Eire         GMT-0        Israel       Navajo       PST8PDT      UTC          
Brazil/      EST          GMT+0        Jamaica      NZ           right/       WET          
Canada/      EST5EDT      Greenwich    Japan        NZ-CHAT      ROC          W-SU         

Je recommanderais de s'y connecter plutôt que de copier.

$ sudo unlink /etc/localtime 
$ sudo ln -s /usr/share/zoneinfo/Etc/GMT+6 /etc/localtime

Maintenant la date montre le fuseau horaire différent:

$ date -u
Thu Jan 23 05:40:31 UTC 2014

$ date 
Wed Jan 22 23:40:38 GMT+6 2014

Ubuntu / Debian Distros

Pour changer le fuseau horaire de l’une de ces distributions, vous pouvez utiliser cette commande:

$ sudo dpkg-reconfigure tzdata

    SS n ° 1

$ sudo dpkg-reconfigure tzdata

Current default time zone: 'Etc/GMT-6'
Local time is now:      Thu Jan 23 11:52:16 GMT-6 2014.
Universal Time is now:  Thu Jan 23 05:52:16 UTC 2014.

Maintenant, quand on vérifie:

$ date -u
Thu Jan 23 05:53:32 UTC 2014

$ date 
Thu Jan 23 11:53:33 GMT-6 2014

NOTE: Il existe également cette option dans Ubuntu 14.04 et versions supérieures avec une seule commande (source: Ask Ubuntu - définition du fuseau horaire à partir du terminal ):

$ sudo timedatectl set-timezone Etc/GMT-6

Sur l'utilisation de "Etc / GMT + 6"

extrait de la réponse de MattJohnson sur SO

Des zones comme celles-ci Etc/GMT+6sont volontairement inversées pour assurer la compatibilité avec les normes POSIX. Voir les commentaires dans ce fichier .

Vous ne devriez presque jamais avoir besoin d'utiliser ces zones. Au lieu de cela , vous devriez utiliser une zone de temps entièrement nommé comme America/New_Yorkou Europe/Londonou tout ce qui est approprié pour votre emplacement. Reportez-vous à la liste ici .

slm
la source
1
Reportez-vous à la réponse à cette question ici stackoverflow.com/questions/21282367/timezone-setting-in-linux
Rahul Dhobi
@ user3184706 - vous avez en quelque sorte semé le désordre ici. Votre Q ici était comment changer le fuseau horaire, auquel j'ai répondu. Le bit sur l’utilisation de GMT .. fuseau horaire ou pas que le SO A fourni est exact, mais j’ai négligé d’inclure cela ici, car vous ne demandiez pas vraiment à ce sujet, même si je le pensais. Je peux soit ajouter ce bit à cet A ou vous pouvez copier / coller cette information ici en tant que votre propre A.
slm
@ user3184706 - pour essayer de nettoyer cela, j'ai inclus Matt's A dans le mien pour le rendre complet.
slm
1
Notez cependant que si vous êtes dans un conteneur, avec Ubuntu vous devez installer le paquet tzdatasinon les fichiers /usr/share/zoneinfon'existeront pas.
Elliott Slaughter
1
timedatectlfonctionne aussi pour SLES 12.
Alexander Malakhov
24

C'est comme ça que je le fais dans Ubuntu. Il suffit de remplacer Asia/Tokyopar votre propre fuseau horaire.

echo 'Asia/Tokyo' | sudo tee /etc/timezone

sudo dpkg-reconfigure -f noninteractive tzdata

Il y a un bug dans tzdata: certaines valeurs sont normalisées par dpkg-reconfigure:

echo 'US/Central' >/etc/timezone
dpkg-reconfigure -f noninteractive tzdata
# Current default time zone: 'America/Chicago'

echo 'US/Eastern' >/etc/timezone
apt-get install --reinstall tzdata
# Current default time zone: 'America/New_York'
utilisateur241
la source
Cela fonctionne aussi, mais dans Debian / Ubuntu, la réponse de slm est probablement plus facile et moins risquée (aucune chance de faute de frappe)
Andreas Hartmann
17

La commande tzselect est faite pour faire ce que vous voulez.

SHW
la source
1
Et pour condenser cela en une seule ligne qui définit la TZvariable sur votre fuseau horaire local - par exemple, pour America / Los_Angeles - export TZ=`printf "2\n49\n21\n1\n" | tzselect 2>&1 | tail -1` . Vous pouvez insérer cette ligne dans votre , as fichier .profile tzselect`, si vous deviez l'exécuter à l'invite.
sameers