Réglage du fuseau horaire du terminal

210

Je souhaite modifier le fuseau horaire de l'horloge système à partir du terminal.

Cela peut être fait avec

tzselect

"qui ouvre une interface graphique en terminal"

ou

sudo cp /usr/share/zoneinfo/Europe/London /etc/localtime

"qui va mettre à gmt"

Mais existe-t-il un moyen de définir le fuseau horaire uniquement avec le décalage, c'est-à-dire-1 ou +5, etc.?

Je dois le faire car je suis en train d’écrire une application pour régler les journaux de décalage ou de rapport et la seule information dont je dispose est l’adresse IP de l’utilisateur. Je peux utiliser une application Web pour trouver l'emplacement de l'adresse IP, mais je dois ensuite définir l'offset, ce qui serait facile SI je pouvais obtenir le décalage de l'emplacement, mais si j'avais besoin de trouver une zone et une ville, ce serait vraiment pénible. .

Si quelqu'un sait comment régler l'horloge système avec +/- heure, ce serait génial.

utilisateur2155009
la source
S'il vous plaît, aidez-nous à prendre la réponse acceptée. Je pense que la réponse de @ Mitch est la meilleure askubuntu.com/a/323163/22308
Nam G VU
1
@NamGVU Non, Mitch n'est pas la meilleure solution, c'est une réponse "Interface graphique dans un terminal". Même l'OP a déclaré "cela ne marchera pas car j'ai besoin d'altr timezone d'un programme sans entrée utilisateur, j'ai besoin d'une commande que je peux alimenter en solution de terminal non gui" , et c'est le même objectif que la plupart des gens souhaiteraient trouver "une solution de terminal, "un script convivial. Collin Anderson est mieux si vous connaissez une ville, ou Ryan est simplement GMT + -n
Xen2050
Dans Ubuntu 18.04, tzselect n’ouvre pas d’interface graphique. Il a une sélection de menu basée sur le terminal.
Tim Richardson

Réponses:

321

Pour changer de fuseau horaire depuis un terminal, appuyez simplement sur les touches Ctrl+ et Alt+ Tde votre clavier pour ouvrir le terminal. Lorsqu'il s'ouvre, exécutez les commandes ci-dessous:

sudo dpkg-reconfigure tzdata

Une fois ouvert, suivez simplement les écrans pour changer de fuseau horaire.

Mitch
la source
14
cela ne fonctionnera pas car j'ai besoin d'altr timezone d'un programme sans entrée utilisateur, j'ai besoin d'une commande que je peux alimenter en solution non gui de terminal grâce à la réponse
user2155009
1
Merci!!! cela aide, mais je suis déjà modifié manuellement etc / timezone =) comme php.net/manual/en/timezones.php !!! absolument identique !!!
Vladimir Ch
La reconfiguration de tzdata semble également régler l'horloge matérielle de sorte que l'heure affichée reste la même après le changement de fuseau horaire. Vous voudrez peut-être que si votre heure était correcte mais que le fuseau horaire ne soit pas correct. Cependant, vous ne voudrez certainement pas toucher votre horloge matérielle lorsque vous voyagez. L’ approche timedatectl semble ne changer que le fuseau horaire.
SnakE
@SnakE affiche pour moi les changements d'heure en conséquence
RiaD
je l'ai changé de mastic de commad line sans aucun problème pourquoi vous avez dit que mon ami? @ADTC
saber tabatabaee yazdi
170

Vous pouvez également utiliser le nouveau timedatectlpour régler l'heure dans 14.04.

sudo timedatectl set-timezone America/New_York
Collin Anderson
la source
Comment l'installez-vous sur Ubuntu?
Division par zéro
1
Il est installé par défaut le 14.04.
Collin Anderson
6
Pour voir toutes les options disponibles, vous pouvez exécuter ls -R --group-directories-first /usr/share/zoneinfo. (Veillez à ne pas modifier ou effacer un fichier ici.) En savoir plus sur posixet rightpréfixes est ici .
ADTC
Cela marche! ...
Dan Nissenbaum
3
Utilisez sudo timedatectl set-timezone Etc/UTCpour UTC.
Zoltán
19

Vous pouvez utiliser les fichiers GMT ± x dans /usr/share/zoneinfo/Etc.

sudo ln -fs /usr/share/zoneinfo/Etc/GMT$offset /etc/localtime
Ry-
la source
merci allot pour la réponse im obtenir une erreur ln: impossible de créer un lien symbolique `/ etc / localtime ': le fichier existe oboiusly im ne sais pas ce que je fais savez-vous de bon tutoriel pour cela ou même quelques mots clés je peux google merci je suis utiliser la commande correctement? im utilisant sudo ln / usr / share / zoneinfo / Etc / GMT $ + 1 / etc / localtime pour régler l’horloge sur + 1gmt
utilisateur2155009 le
9
minitech a oublié le drapeau de force, je suppose donc -> sudo ln -sf ....
Tele
1
Cela fonctionnera un peu, mais ne mettra pas à jour le nom de tz dans /etc/timezone.
poolie
1
Pour mettre à jour le fichier / etc / timezone, lancezsudo dpkg-reconfigure --frontend noninteractive tzdata
Pierre Gramme
17

Je me rends compte que ce fil est un peu démodé, mais je cherchais une meilleure solution car je devais définir automatiquement le fuseau horaire d'une machine virtuelle lorsqu'un utilisateur le télécharge sur notre site Web et le déploie. Voici ce que j'ai fini avec:

echo "Setting TimeZone..."
export tz=`wget -qO - http://geoip.ubuntu.com/lookup | sed -n -e 's/.*<TimeZone>\(.*\)<\/TimeZone>.*/\1/p'` &&  timedatectl set-timezone $tz
export tz=`timedatectl status| grep Timezone | awk '{print $2}'`
echo "TimeZone set to $tz"

Cela interrogera geoip.ubuntu.com à partir du serveur une fois démarré sur le nouveau réseau (mon script vérifie la connectivité du premier cours), puis définira le fuseau horaire du serveur en fonction de la réponse.

Le "wget ​​-q0 -" indique à wget de ne générer que les résultats sur stdout, qui est ensuite redirigé vers la variable $ tz.

J'espère que ça aide quelqu'un!

Clayton Dukes
la source
1
Génial! Sur Ubuntu 16.04, il devrait être "grep zone" et "print $ 3" ​​à la place.
user334639
Je propose un cli différent pour obtenir le fuseau horaire. Un peu plus propre à mon avis: curl -s ' geoip.ubuntu.com/lookup ' | xmllint --xpath '/ Response / TimeZone / text ()' -
Darko Miletic
11

TL; DR /etc/localtime est un lien symbolique qui pointe vers un fichier au format /usr/share/zoneinfo/Continent/City. En modifiant l'endroit où il pointe, vous pouvez modifier votre fuseau horaire.

Pour modifier le fuseau horaire, supprimez le /etc/localtimeet attribuez un lien symbolique à la ville de votre choix. Par exemple, les ls -l /etc/localtimerapports sur lesquels ce fichier pointe /usr/share/zoneinfo/America/Denver. Pour changer à New York, je fais

  1. sudo rm /etc/localtime
  2. sudo ln -s /usr/share/zoneinfo/America/New_York /etc/localtime
  3. Attendez une minute pour que mon horloge soit mise à jour

La capture d'écran ci-dessous montre les étapes et la confirmation de timedatectl

entrez la description de l'image ici

Sergiy Kolodyazhnyy
la source
il est agréable de comprendre ce qui se passe derrière le rideau, mais ne pensez-vous pas qu'il serait préférable de suggérer les outils désignés pour cela, comme dpkg-reconfigure tzdata, etc.?
Patrick Cornelissen
@PatrickCornelissen Tout d'abord, il y a tzdatadéjà des réponses , donc suggérer la même chose est inutile. Deuxièmement, tzdatafait à peu près la même chose. C'est à l'utilisateur de décider ce qu'il préfère, il n'est donc ni meilleur ni pire - juste la préférence d'une personne.
Sergiy Kolodyazhnyy
1
Bien, travailler "contre" les outils de distribution pose souvent des problèmes, je vous évite donc votre approche si possible, mais votre solution fonctionnerait (actuellement)
Patrick Cornelissen
Si je comprends bien, cette solution fonctionne sur différentes distributions. Cependant, la base de données de fuseaux horaires est toujours disponible dans le répertoire / usr / share / zoneinfo. Existe-t-il un moyen d’obtenir la base de données de fuseau horaire sans installer le paquet tzdata?
andho
@andho Puisque /var/lib/dpkg/info/tzdata.listsuggère que tous les éléments /usr/share/zoneinfolivrés avec ce paquet, je supposerais que vous devez installer le paquet pour pouvoir disposer de tous les éléments, mais franchement, je ne suis pas tout à fait sûr, et je ne connais pas très bien comment cela fonctionne. distributions. Pensez à poser cette question sous forme de question sous Unix et Linux , et n'hésitez pas à faire référence à cet article si vous souhaitez fournir un contexte à la question.
Sergiy Kolodyazhnyy
10

Le moyen facile de mettre à jour le fuseau horaire consiste à utiliser sudo dpkg-reconfigure tzdata. Mais ce n'est pas si facile à écrire.

Si vous souhaitez définir le fuseau horaire de manière explicite via un script (par exemple, pour configurer une VM), voici une recette:

Définissez une variable pour le fuseau horaire souhaité, par exemple un des

tz=Europe/London
tz=America/Anchorage
tz=Etc/GMT+6

Les valeurs valides sont les répertoires et les noms de fichiers sous /usr/share/zoneinfo.

Alors simplement

sudo cp -vf /usr/share/zoneinfo/$tz /etc/localtime
echo $tz | sudo tee /etc/timezone

Notez que les deux /etc/localtimeet /etc/timezonedoivent être cohérents.

Probablement maintenant, redémarrez pour mettre à jour tous vos services (par exemple, cron).

Rick-777
la source
-1: Ne jamais utiliser cppour définir / etc / localtime. / etc / localtime est un lien symbolique vers le fichier correct. Si vous le cpmodifiez, vous écraserez le contenu du fichier tzdata vers lequel il pointe actuellement. Ainsi, tout à coup (par exemple), le fichier tzdata UTC contient des données de fuseau horaire pour Europe / London plutôt que pour UTC, ce qui est mauvais (et gênant). à résoudre, comme je peux le dire par expérience personnelle)
Foogod
5

Voici la méthode que j'utilise, qui est centrée sur les États-Unis, car je n'ai pas à m'inquiéter des fuseaux horaires non américains.

Si je dois déterminer le fuseau horaire actuel, je fais soit:

cat /etc/timezone  

ou

sudo hwclock --show  

Je fais alors:

timedatectl set-timezone <_designation_>

<_designation_>est l'un des suivants:

États-Unis / Est des
États - Unis / Centre des
États-Unis / Montagne
États-Unis / Pacifique
États - Unis / Alaska
États - Unis / Aléoutienne
États-Unis / Arizona
États-Unis / Est-Indiana
États - Unis / Hawaï
États-Unis / Indiana-Starke
États - Unis / Michigan
États-Unis / Pacifique-Nouveau
États - Unis / Samoa

PAR EXEMPLE:

timedatectl set-timezone US/Eastern  

D'autres désignations de fuseaux horaires peuvent être trouvées ici: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

Redblur
la source
tzselectest un bon moyen d'obtenir la chaîne du fuseau horaire
Martin Thoma
0

Vous ne pouvez le faire que si vous sélectionnez le fichier de fuseau horaire que vous souhaitez faire correspondre à chaque décalage de fuseau horaire.

Certaines réponses ont suggéré d'utiliser les fichiers de / usr / share / zoneinfo / Etc, mais le problème avec ceux-ci est qu'ils sont agnostiques DST.

Par conséquent, à moins que vous ne choisissiez une configuration de fuseau horaire correspondant à chaque décalage ou que vous ne vous préoccupiez pas de l'heure d'été, il n'existe aucun moyen de le faire de manière générique.

Alex G
la source