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 (corrigez-moi si je me trompe).
Quoi qu’il en soit, l’un des serveurs auquel je me connecte, pour les scp
fichiers, s’exécute EDT
et stocke les fichiers que je dois copier au format/path/to/filename/data20120913
J'ai essayé d'essayer de rsync
classer des fichiers en utilisant quelque chose comme l' -mtime -1
indicateur de recherche pour les fichiers modifiés le dernier jour, mais je n'ai pas eu de chance.
Cela ne me dérange pas de simplement utiliser scp
pour copier le fichier de la journée en cours, mais à l'heure actuelle, il existe une fenêtre de 4 heures où l'exécution date +%Y%m%d
indique un jour différent sur chaque serveur, ce qui me perturbe un peu.
En regardant à travers, man date
je vois que je peux avoir la sortie heure comme UTC
, mais je ne vois pas le moyen de la sortir comme un autre fuseau horaire commeEDT
Je suppose que je pourrais aussi utiliser quelque chose comme l' GNU
extension de date date -d 20100909 +%s
pour obtenir la date en secondes à partir de l'époque, appliquer un 4 * 60 * 60
second calcul manuel et voir comment rendre celle-ci en tant que date. .
Existe-t-il un moyen plus simple d’afficher la date dans un YYYYMMDD
format EDT
défini sur un serveur défini UTC
?
Réponses:
Vous pouvez définir un fuseau horaire pour la durée de la requête, ainsi:
Notez les espaces entre le
TZ
paramètre et ladate
commande. Dans unrc
shell Bourne-like et-like , laTZ
variable n'est définie que pour la ligne de commande. Dans d' autres coquilles (csh
,tcsh
,fish
), vous pouvez toujours utiliser laenv
commande à la place:tl; dr
Sur les systèmes Linux. Les fuseaux horaires sont définis dans les fichiers du
/usr/share/zoneinfo
répertoire. Cette structure est souvent appelée "base de données Olson" pour honorer son contributeur fondateur.Les règles de chaque fuseau horaire sont définies comme des 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 lesquels la zone s’applique; un décalage par rapport à l'heure UTC pour l'heure standard; et la notation permettant de définir le cas échéant le passage à l'heure d'été ou à l'heure d'été.
Par exemple, le répertoire "America" contient les informations requises pour New York dans le fichier
America/New_York
utilisé ci-dessus.Attention, la spécification d'une zone inexistante (nom de fichier) est ignorée et les heures UTC sont signalées. Par exemple, cela signale une heure incorrecte:
La spécification UNIX unique, version 3, appelée SUSv3 ou POSIX-2001, indique que, pour des raisons de portabilité, la chaîne de caractères identifiant la description du fuseau horaire doit commencer par un caractère deux-points. Ainsi, on peut aussi écrire:
En tant que méthode alternative à la spécification de fuseaux horaires utilisant un 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 suit:
où
std
est le nom du composant standard et celui dedst
l'heure d'été. Chaque nom est composé de trois caractères ou plus. Iloffset
est positif pour les fuseaux horaires situés à l'ouest du premier méridien et négatif pour ceux situés à l'est du méridien. Le décalage est ajouté à l'heure locale pour obtenir l'UTC (anciennement GMT). Les champsstart
etend
heure indiquent quand les transitions standard / lumière du jour ont lieu.Par exemple, dans l’est des États-Unis, l’heure standard est 5 heures plus tôt que UTC, et nous pouvons spécifier
EST5EDT
à la place deAmerica/New_York
. Toutefois, ces solutions de remplacement ne sont pas toujours reconnues, en particulier pour les zones situées en dehors des États-Unis, et il vaut mieux les éviter.HP-UX (UNIX compatible SUSv3) utilise des règles textuelles
/usr/lib/tztab
et les noms POSIX tels que EST5EDT, CST6CDT, MST7MDT, PST8PDT. Le fichier comprend toutes les règles historiques de chaque fuseau horaire, semblables à la base de données Olson.REMARQUE: Vous devriez être en mesure de trouver tous les fuseaux horaires en inspectant le répertoire suivant:
/usr/share/zoneinfo
.la source
export
air mieux queenv
commandeVous pouvez le faire en manipulant la
TZ
variable d'environnement. Ce qui suit vous donnera l’heure locale pour US / Eastern, qui sera également assez malin pour gérer l’heure d’été lorsque cela fonctionne:Le nom de la zone provient des fichiers et des répertoires à l'intérieur
/usr/share/zoneinfo
.la source
Faites attention! Date crachera volontiers l'heure dans votre fuseau horaire ACTUEL, si vous lui attribuez un fuseau horaire qu'il ne reconnaît pas.
Regarde ça:
Notez qu'il n'y a pas de fuseau horaire appelé EDT. En réalité,
résultats
Et cela fonctionne:
Cependant, si votre ami habite dans le pays mystique de Gobbledygook et que ses informations de zone coïncident avec les vôtres, vous pouvez faire en sorte que la date soit affichée dans la zone de Gobbledygook. la zone ne lui est pas connue:
la source
TZ
chaîne malformée renvoie l'heure UTC.la source
La syntaxe de la date est arcane et sujette aux erreurs, ce qui complique tout appel en ligne de commande. J'ai donc écrit un petit script (je l'ai appelé worldtime ), qui imprimera l'heure spécifiée (ou actuelle) à partir du zome de l'heure de base (votre heure locale) dans d'autres fuseaux horaires et inversement.
C'est ici. Ajustez-le pour répondre à vos besoins, mettez-le dans votre chemin, et rendez-le exécutable.
la source
Vous avez souvent l’horodatage dans le fuseau horaire local et vous devez le convertir en tz distant. Cela peut être fait avec:
où:
la source