Question Définition du fuseau horaire depuis le terminal


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 dans le terminal"

ou

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

"qui va mettre à gmt"

Mais y a-t-il un moyen de définir le fuseau horaire uniquement avec le décalage, par exemple-1 ou +5, etc.?

Je dois le faire pendant que j'écris une application pour ajuster les journaux temporels ou de rapport et la seule information que j'ai est l'IP de l'utilisateur. Je peux utiliser une application Web pour trouver l'emplacement de l'IP, mais je dois ensuite définir un décalage qui serait facile si je pouvais simplement obtenir le décalage de l'emplacement, mais si je devais trouver une zone et une ville, ce serait très difficile. .

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


174
2017-07-22 20:22


origine


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
@NamGVU Non, Mitch n'est pas la meilleure solution, c'est une réponse "GUI dans un terminal". Même l'OP a dit "Cela ne marchera pas, car je dois modifier le fuseau horaire à partir d'un programme sans intervention de l'utilisateur. J'ai besoin d'une commande que je peux utiliser dans un terminal sans solution d'interface", et c'est le même objectif que la plupart des gens voudraient en recherchant une "solution de terminal", une solution conviviale pour les scripts. Collin Anderson c'est mieux si vous connaissez une ville, ou Ryan's pour plain GMT + -n - Xen2050


Réponses:


Pour changer de fuseau horaire depuis le terminal, appuyez simplement sur Ctrl+Alt+T sur votre clavier pour ouvrir le terminal. Lorsqu'il s'ouvre, lancez la ou les commandes ci-dessous:

sudo dpkg-reconfigure tzdata

Une fois ouvert, suivez simplement les écrans pour modifier le fuseau horaire.


274
2017-07-22 22:02



C'est la méthode la plus simple et la plus indolore. - Thomas Ward♦
cela ne marchera pas comme je dois altrunone d'un programme sans intervention de l'utilisateur j'ai besoin d'une commande que je peux alimenter dans le terminal pas de solution d'interface grâce à la réponse - user2155009
@ user2155009 solution très simple non basée sur l'interface graphique La réponse de Collin Anderson. Je ne comprends pas pourquoi quelqu'un donnerait une réponse à une question du terminal. Si nous voulions utiliser une interface graphique, nous aurions de toute façon utilisé une interface graphique, ne pas lancer Terminal depuis l'interface graphique, puis lancer une interface graphique depuis un terminal ... - ADTC
THX!!! cela aide, byt je suis déjà changé manuellement etc / fuseau horaire =) comme php.net/manual/en/timezones.php !!! absolument identique !!! - Vladimir Ch
@ADTC Exactement mes pensées réduites pour cette raison. - Elijah Lynn


Vous pouvez également utiliser le nouveau timedatectl pour régler l'heure en 14.04.

sudo timedatectl set-timezone America/New_York

141
2017-09-15 15:43



Comment l'installer sur Ubuntu? - Division by Zero
Il est installé par défaut le 14.04. - Collin Anderson
Pour voir toutes les options disponibles, vous pouvez exécuter ls -R --group-directories-first /usr/share/zoneinfo. (Veillez à ne pas modifier ou effacer aucun fichier ici.) Plus d'infos sur posix et right les préfixes sont ici. - ADTC
Cela marche! ... - Dan Nissenbaum
Utilisation sudo timedatectl set-timezone Etc/UTC pour UTC. - Zoltán


Vous pouvez utiliser le GMT ±X fichiers dans /usr/share/zoneinfo/Etc.

sudo ln -fs /usr/share/zoneinfo/Etc/GMT$offset /etc/localtime

17
2017-07-22 20:43



merci assignent pour réponse im obtenir une erreur Dans: Impossible de créer un lien symbolique `/ etc / localtime ': Le fichier existe oboiusly je ne suis pas sûr de ce que fait im ne savez-vous de bon tutoriel pour cela, ou même quelques mots clés que je peux google grâce am i utiliser la commande correctement? im en utilisant sudo ln / usr / share / zoneinfo / Etc / GMT $ + 1 / etc / localtime pour régler l'horloge sur + 1gmt - user2155009
minitech a oublié le drapeau de la force je suppose donc -> sudo ln -sf .... - Tele
Cela fonctionnera un peu, mais ne mettra pas à jour le nom tz dans /etc/timezone. - poolie


Je me rends compte que ce sujet est un peu daté, mais je cherchais une meilleure solution parce que je devais définir automatiquement le fuseau horaire dans une VM après que l'utilisateur le télécharge de 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 qu'il est démarré sur le nouveau réseau (mon script vérifie d'abord la connectivité), puis définit le fuseau horaire du serveur en fonction de la réponse.

Le "wget ​​-q0 -" indique à wget de ne sortir que les résultats dans stdout, qui sont ensuite redirigés vers la variable $ tz.

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


16
2017-12-25 03:22



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


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

Pour changer de fuseau horaire, supprimez le /etc/localtime et attribuez un lien symbolique à la ville de votre choix. Par exemple, ls -l /etc/localtime signale que ce fichier indique /usr/share/zoneinfo/America/Denver. Pour le changer à New York, je le 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

enter image description here


10
2018-05-06 02:21



il est agréable de comprendre ce qui se passe derrière le rideau, mais pensez-vous pas qu'il serait préférable de proposer les outils désignés pour cela comme dpkg-reconfigure tzdata etc.? - Patrick Cornelissen
@PatrickCornelissen Tout d'abord, il y a des réponses pour tzdatadéjà, alors suggérer la même chose est inutile. Seconde, tzdata fait à peu près la même chose. C'est à l'utilisateur de décider ce qu'il préfère, donc ce n'est ni mieux ni pire - juste la préférence d'une personne. - Sergiy Kolodyazhnyy
Eh bien, travailler "contre" les outils de distribution entraîne souvent des problèmes, donc j'éviterais votre approche si possible, mais assez juste, votre solution fonctionnerait (actuellement) - Patrick Cornelissen
Si je comprends bien, cette solution fonctionne sur différentes distributions. Mais la base de données des fuseaux horaires doit toujours être disponible dans le répertoire / usr / share / zoneinfo. Est-il possible d'obtenir la base de données de fuseau horaire sans installer le package tzdata? - andho
@andho depuis /var/lib/dpkg/info/tzdata.list suggère que tous les articles dans /usr/share/zoneinfo venir avec ce paquet, je présume que vous avez besoin d'installer le paquet afin d'avoir tous les éléments, mais franchement, je ne suis pas tout à fait sûr, plus pas tout à fait au courant de la façon dont cela fonctionne sur d'autres distributions. Pensez à demander ceci comme une question sur Unix et Linux, et n'hésitez pas à faire référence à cet article si vous souhaitez fournir un contexte à la question. - Sergiy Kolodyazhnyy


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

Si vous souhaitez définir explicitement le fuseau horaire via un script (par exemple, pour configurer une machine virtuelle), 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/localtime et /etc/timezone doit être cohérent.

Probablement maintenant redémarrer pour obtenir tous vos services mis à jour aussi (par exemple, cron).


10
2018-05-13 18:13



-1: Ne jamais utiliser cp définir / etc / localtime. / etc / localtime est un lien symbolique au bon fichier. Si tu utilises cp pour le changer, vous fait écraserait le contenu de tout tzdata fichier, il est pointant actuellement, si soudainement (par exemple) le fichier tzdata UTC contient des données de fuseau horaire pour l'Europe / Londres plutôt que pour UTC, ce qui est mauvais (et ennuyeux pour résoudre les problèmes, comme je peux le dire par expérience personnelle) - Foogod


Voici la méthode que j'utilise, centrée sur les États-Unis, car je n'ai pas besoin de me soucier des fuseaux horaires non américains.

Si j'ai besoin de déterminer le fuseau horaire actuel, je le fais soit:

cat /etc/timezone  

ou

sudo hwclock --show  

Je fais alors:

timedatectl set-timezone <_designation_>

<_designation_> est l'un des suivants:

US / est
US / Central
US / Montagne
US / Pacifique
US / Alaska
US / Aleutian
US / Arizona
États-Unis / Est-Indiana
US / Hawaii
US / Indiana-Starke
US / Michigan
US / Pacifique-Nouveau
US / Samoa

PAR EXEMPLE.:

timedatectl set-timezone US/Eastern  

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


3
2018-03-29 19:04