GNU/Linux >> Tutoriels Linux >  >> Linux

Comment faire en sorte que `date` affiche l'heure d'un fuseau horaire différent ?

J'ai un serveur en cours d'exécution avec le fuseau horaire défini sur UTC . Il semblait que c'était généralement une bonne pratique (veuillez me corriger si je me trompe).

Quoi qu'il en soit, l'un des serveurs auquel je me connecte, afin de scp fichiers, s'exécute sur EDT et stocke les fichiers que je dois copier au format /path/to/filename/data20120913

J'ai regardé essayer de rsync fichiers en utilisant quelque chose comme -mtime -1 de find drapeau pour les fichiers modifiés le dernier jour, mais je n'ai pas eu de chance.

Cela ne me dérange pas d'utiliser scp pour copier le fichier du jour en cours, mais pour l'instant, il y a une fenêtre de 4 heures où s'exécute date +%Y%m%d donnera un jour différent sur chaque serveur et ça me dérange un peu.

En parcourant man date Je vois que je peux avoir l'heure en sortie sous la forme UTC , mais je ne vois pas comment le faire sortir comme un autre fuseau horaire comme EDT

Je suppose que je pourrais aussi utiliser quelque chose comme le GNU extension de date date -d 20100909 +%s pour obtenir la date en secondes de l'époque, appliquez un manuel 4 * 60 * 60 deuxième calcul, et voyez comment le rendre comme une date - mais ensuite, lorsque l'heure d'été entrera en vigueur, il y aura toujours une heure de retard.

Existe-t-il un moyen plus simple d'afficher la date dans un format YYYYMMDD format pour EDT sur un serveur défini sur UTC ?

Réponse acceptée :

Vous pouvez définir un fuseau horaire pour la durée de la requête, ainsi :

TZ=America/New_York date

Notez l'espace blanc entre le TZ paramètre et la date commande. Dans Bourne-like et rc -like shell, qui définit le TZ variable uniquement pour la ligne de commande. Dans d'autres shells (csh , tcsh , fish ), vous pouvez toujours utiliser le env commande à la place :

env TZ=America/New_York date

tl;dr

Sur les systèmes Linux. les fuseaux horaires sont définis dans des fichiers dans /usr/share/zoneinfo annuaire. Cette structure est souvent appelée la "base de données Olson" pour honorer son contributeur fondateur.

Les règles pour chaque fuseau horaire sont définies sous forme de lignes de fichier texte qui sont ensuite compilées dans un fichier binaire. Les lignes ainsi compilées, définissent le nom de la zone; une plage de données et de temps pendant laquelle la zone s'applique ; un décalage par rapport à UTC pour l'heure standard ; et la notation pour définir comment la transition vers et depuis l'heure d'été se produit, le cas échéant.

Par exemple, le répertoire "America" ​​contient les informations nécessaires pour New York dans le fichier America/New_York tel qu'utilisé, ci-dessus.

Attention, la spécification d'une zone inexistante (nom de fichier) est silencieusement ignorée et les heures UTC sont signalées. Par exemple, ceci signale une heure incorrecte :

TZ="America/New York" date ### WRONG ###

La spécification UNIX unique, version 3, connue sous le nom de SUSv3 ou POSIX-2001, note que pour la portabilité, la chaîne de caractères qui identifie la description du fuseau horaire doit commencer par un caractère deux-points. Ainsi, on peut aussi écrire :

TZ=":America/New_York" date
TZ=":America/Los_Angeles" date

Comme méthode alternative à la spécification des fuseaux horaires à l'aide d'un nom de chemin d'accès à un fichier de description, SUSv3 décrit le modèle POSIX. Dans ce format, une chaîne est définie comme :

std offset [dst[offset][,start-date[/time],end-date[/time]]]

std est le nom de composant standard et dst est celui de l'heure d'été. Chaque nom est composé de trois caractères ou plus. Le offset est positif pour les fuseaux horaires à l'ouest du premier méridien et négatif pour ceux à l'est du méridien. Le décalage est ajouté à l'heure locale pour obtenir UTC (anciennement connu sous le nom de GMT). Le start et end les champs d'heure indiquent quand les transitions standard/heure d'été se produisent.

Connexe :Excel - prévoir une date future basée sur le nombre moyen de jours entre un nombre variable de dates dans le passé ?

Par exemple, dans l'est des États-Unis, l'heure standard est 5 heures plus tôt que l'UTC, et nous pouvons spécifier EST5EDT au lieu de America/New_York . Cependant, ces alternatives ne sont pas toujours reconnues, en particulier pour les zones en dehors des États-Unis, et il vaut mieux les éviter.

HP-UX (un UNIX compatible SUSv3) utilise des règles textuelles dans /usr/lib/tztab et les noms POSIX comme EST5EDT, CST6CDT, MST7MDT, PST8PDT. Le fichier comprend toutes les règles historiques pour chaque fuseau horaire, semblable à la base de données Olson.

REMARQUE : Vous devriez pouvoir trouver tous les fuseaux horaires en inspectant le répertoire suivant :/usr/share/zoneinfo .


Linux
  1. Comment vérifier le fuseau horaire sous Linux

  2. Comment synchroniser la date et l'heure à partir de la ligne de commande dans Ubuntu

  3. Comment faire un Ls puis trier les résultats par date de création ?

  4. Comment définir une variable égale à la sortie d'une commande dans Grub2 ?

  5. Comment suivre le temps à partir de la ligne de commande ?

Comment obtenir la date et l'heure actuelles en Python

Comment définir le fuseau horaire dans CentOS 7

Comment changer la date, l'heure et le fuseau horaire dans Ubuntu 20.04 LTS

Comment définir la date, l'heure et le fuseau horaire dans RHEL 8

Vérifier le fuseau horaire sous Linux

L'indicateur de temps n'affiche pas la date/l'heure ?