Dans un script Bash, je veux imprimer la date / heure actuelle au format ISO 8601 (de préférence UTC), et il semble que cela devrait être aussi simple que date -I
:
http://ss64.com/bash/date.html
Mais cela ne semble pas fonctionner sur mon Mac:
$ date -I
date: illegal option -- I
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
Et en effet, man date
ne répertorie pas cette option.
Quelqu'un sait pourquoi c'est, ou tout autre moyen (facile) pour moi d'imprimer la date au format ISO 8601? Merci!
2011-08-27
et2011-08-27T18:55:43Z
sont au format ISO 8601. Et vraiment, modifier la question serait plus utile que de diffuser les mises à jour sur plusieurs commentaires. Un exemple de ce que vous essayez d'imprimer serait idéal.brew
(qui utilise le préfixe «g»)gdate -I
a fonctionné, avec d'autres indicateurs GNU.Réponses:
Vous pourriez utiliser
date "+%Y-%m-%d"
Ou pour une date entièrement conforme ISO-8601 , utilisez l'un des formats suivants:
date -u +"%Y-%m-%dT%H:%M:%SZ"
Production:
ou
Production:
la source
date -u +"%Y-%m-%dT%H:%MZ"
exactement ce que je cherchais.Z
et+00:00
sont les mêmes (pour la plupart). Aux fins de la traduction de l'heure, ils signifient tous deux UTC. Cependant l'Angleterre est+00:00
en hiver et+01:00
en été (BST).Z
c'est UTC, alors que+00:00
c'est GMT. UTC n'est pas un fuseau horaire et n'a pas de décalage; Le décalage est défini comme le décalage horaire entre un fuseau horaire et UTC, la norme de mesure du temps. GMT est +00: 00 supprimé de UTC (et BST est, comme vous le dites, +01: 00 supprimé de UTC).Date GNU
date -I
est le même quedate +%F
, et-Iseconds
et-Iminutes
comprennent également le temps avec décalage TUC.$ date +%F # -I or +%Y-%m-%d 2013-05-03 $ date +%FT%T%z # -Iseconds or +%Y-%m-%dT%H:%M:%S%z 2013-05-03T15:59:24+0300 $ date +%FT%H:%M # -Iminutes or +%Y-%m-%dT%H:%M%z 2013-05-03T15:59+0300
-u
est commeTZ=UTC
.+00:00
peut être remplacé parZ
.Ce sont également des formats de date ou d'heure ISO 8601 valides:
20130503T15 (%Y%m%dT%M) 2013-05 (%Y%m) 2013-W18 (%Y-W%V) 2013-W18-5 (%Y-W%V-%u) 2013W185 (%YW%V%u) 2013-123 (%Y-%j, ordinal date) 2013 (%Y) 1559 (%H%M) 15 (%H) 15:59:24+03 (UTC offset doesn't have to include minutes)
Ce ne sont pas:
2013-05-03 15:59 (T is required in the extended format) 201305 (it could be confused with the YYMMDD format) 20130503T15:59 (basic and exteded formats can't be mixed)
la source
Une alternative courte qui fonctionne à la fois sur les dates GNU et BSD est:
la source
date -u +%FT%TZ
parce qu'en UTC, le décalage serait de toute façon nulLe paquet coreutils fournit des versions GNU des outils. À installer:
Vous pouvez voir ce qui est fourni:
Notez qu'il est livré avec la date:
Ceci est la commande de date GNU standard donc elle prendra le commutateur -I:
la source
gdate --iso-8601=ns
2016-09-29T16: 54: 23,485230000 + 02: 00Utilisez simplement les
date
options de formatage normales :date '+%Y-%m-%d'
Edit: pour inclure l'heure et UTC, ceux-ci sont équivalents:
date -u -Iseconds date -u '+%Y-%m-%dT%k:%M:%S%z'
la source
Ce n'est pas une fonctionnalité de Bash, c'est une fonctionnalité du
date
binaire. Sur Linux, vous auriez généralement la version GNU coreutils dedate
, tandis que sur OSX, vous auriez les utilitaires hérités BSD. La version GNU peut certainement être installée en tant que package optionnel, ou vous pouvez utiliser votre propre remplacement - je pense que cela devrait être un simple one-liner, par exemple en Perl.la source
Un
coreutils
package précompilé pour Mac OS X est disponible sur:http://rudix.org/packages-abc.html#coreutils .
la source
En prenant les autres réponses un peu plus loin, vous pouvez ajouter une fonction à votre ~ / .bashrc ou ~ / .zshrc pour ajouter l'
-I
indicateur de date :date() { if [ "$1" = "-I" ]; then command date "+%Y-%m-%dT%H:%M:%S%z" else command date "$@" fi }
la source
J'utilise régulièrement 'date -I' sous Linux lors de l'enregistrement de fichiers. ex: touchez x.
date -I
. Alors que l'équivalent sous MacOS est 'date +% F', il est un peu difficile de taper à chaque fois que j'enregistre un fichier. Donc, j'ai défini un alias "alias dt = 'date +% F'" puis touchez x.dt
me donne la date.la source