La commande date
noffre pas une telle chose, ce qui est assez triste puisque la RFC-3339 est la format moderne, répandu et sensé utilisé partout (sauf dans les e-mails qui ne sont ni modernes ni sensés).
Mon décalage de fuseau horaire est actuellement de -08: 00, donc la forme la plus simple de cette commande devrait afficher lheure actuelle sous la forme 2013-09-05T14:58:33.102-08:00
.
Commentaires
Réponse
Il semble que vous puissiez faire plusieurs formats en utilisant le passage à limplémentation GNU de date
(version 5.90 ou supérieure), --rfc3339=
.
Exemples
$ date --rfc-3339=date 2014-03-19 $ date --rfc-3339=seconds 2014-03-19 18:00:05-04:00 $ date --rfc-3339=ns 2014-03-19 18:00:08.179780629-04:00
Si vous voulez que le T
soit ajouté, en tant que hack:
$ date --rfc-3339=seconds | sed "s/ /T/" 2014-03-19T18:35:03-04:00
Si vous le souhaitez en millisecondes :
$ date --rfc-3339=ns | sed "s/ /T/; s/\(\....\).*\([+-]\)/\1\2/g" 2014-03-19T18:42:52.362-04:00
Références
Commentaires
- De nos jours, aucun piratage nest nécessaire pour obtenir le ‘ T ‘.
--iso-8601' option accepts the same arguments as
–rfc-3339`, et inclut le ‘ T ‘ dans son - Sed part
s/\(\....\).*-/\1-/g
doit êtres/\(\....\).*\([+-]\)/\1\2/g
pour fonctionner également à lest de lAtlantique. - @svante – merci pour le détail, corrigé.
- @Eonil qui nest en fait pas correct, le RFC3339 déclare:
NOTE: ISO 8601 defines date and time separated by "T".
Alors que RFC3339 vous permet dutiliser un espace à la place. Lisez ietf.org/rfc/rfc3339.txt Section 5.6 - @ rwenz3l Ma faute. Je viens de lire uniquement la partie ABNF et jai raté les notes. Merci de lavoir signalé!
Réponse
Avec GNU date
(5,90 ou plus):
$ TZ=America/Anchorage date "+%FT%T.%N%:z" 2014-03-19T14:29:31.041119357-08:00
Remplacez %N
par %3N
pour les millisecondes, %6N
pour les micro-secondes …
AFAIK, aucune des spécifications POSIX, Unix ou LSB ne spécifie de commande pouvant afficher les heures avec granularité inférieure à la seconde, mais la partie fractionnaire est facultative dans la RFC 3339.
POSIX / Unix / LSB strftime prend en charge %z
pour afficher le décalage TZ comme -0800
, donc le plus portable que vous « allez probablement obtenir est:
$ TZ=America/Anchorage perl -MPOSIX -le "$t = strftime "%Y-%m-%dT%T%z", localtime; $t =~ s/..$/:$&/; print $t" 2014-03-19T14:30:23-08:00
Réponse
Vous pouvez également formater lheure selon RFC3339 (ISO8601) plus facilement:
$ date -u +"%Y-%m-%dT%H:%M:%SZ" 2016-11-08T08:52:55Z
REMARQUE: Ce formulaire at est également utilisé dans la Label Schema Convention RC 1.0
Commentaires
- Ce ‘ nest pas une RFC3339 valide. La réponse dEran ‘ à « « date +% Y-% m-% dT% T% z « est correcte et comporte moins de caractères. Si vous voulez en UTC passer lindicateur -u, qui mettra à zéro le décalage du fuseau horaire.
- Avec lindicateur
-u
, cette réponse est correcte, non? - @briceburg pourquoi ce RFC3339 nest-il pas valide? Daprès tools.ietf.org/html/rfc3339#section-5.6 , cela semble correct pour autant que je sache.
Réponse
GNU date
a le format ISO-8601 intégré – nest pas que assez proche voire identique à la RFC-3339?
1065 % date --iso-8601=seconds 2014-03-19T16:51:16-0600
Commentaires
- ISO-8601 permet différentes formatage des dates et des heures, mais je pense que lOP demande spécifiquement le format Date W3C » Date complète plus heures, minutes, secondes et un fraction décimale dune seconde AAAA-MM-JJThh: mm: ss.sTZD (par exemple 1997-07-16T19: 20: 30.45 + 01: 00) » – Formats de date et dheure W3C .
Réponse
Que diriez-vous du bon vieux temps:
$ date +%Y-%m-%dT%T%z 2015-10-29T14:47:06+0200
Commentaires
- Où sont les informations de fuseau horaire?
- Cela fonctionne à la fois sur Mac et Linux ‘ date ‘
- Et les millisecondes?
- note rapide ici, sans ouvrir la RFC, le segment de fuseau horaire,
0200
manque un deux-points, ce qui peut casser certains systèmes qui en ont besoin. - @MikeMackintosh ‘ est pertinente; la sortie montrée ici nest pas une date RFC 3339 légale. Les deux points dans le segment de fuseau horaire sont requis pour la RFC 3339; voir la définition de
time-numoffset
à tools.ietf.org/html/rfc3339#section-5.6 .
La note de
Réponse
echo "Local date only:" date "+%Y-%m-%d" echo echo "Local date and time:" date "+%Y-%m-%dT%H:%M:%S%z" | sed "s@^.\{22\}@&:@" echo echo "UTC date and time:" date -u "+%Y-%m-%dT%H:%M:%SZ"
Ces commandes sont compatibles POSIX, à lexception de la spécification de conversion %z
. Cependant, %z
est largement pris en charge et fonctionne de la même manière sous Linux, MacOS, FreeBSD, OpenBSD, NetBSD, DragonFlyBSD, Solaris, Minix et Haiku. Il fonctionne également avec les outils de Busybox, Toybox et sbase (les utilitaires système de base suckless.org). Puisque %z
affiche le décalage du fuseau horaire au format ±HHMM
, nous avons besoin du tube sed
à ajouter un deux-points et remplacez-le par ±HH:MM
.
REMARQUE: La commande date
du projet Heirloom est incompatible %z
sortie: il nimprime pas de signe +
.
2013-09-05 14:58:33.102 -0800
sauf quand il Cest une raison pour laquelle les espaces ne doivent pas du tout être utilisés.