Dans un script Bash, je souhaite imprimer la date/heure actuelle au format ISO 8601 (de préférence, au format 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-il pourquoi c'est une autre manière (facile) d'imprimer la date au format ISO 8601? Merci!
Vous pourriez utiliser
date "+%Y-%m-%d"
Ou pour une date complète date conforme à la norme ISO-8601 , utilisez l'un des formats suivants:
date -u +"%Y-%m-%dT%H:%M:%SZ"
Sortie:
2011-08-27T23:22:37Z
ou
date +%Y-%m-%dT%H:%M:%S%z
Sortie:
2011-08-27T15:22:37-0800
Dans GNU date date -I
est le même que date +%F
, et -Iseconds
et -Iminutes
comprennent également le temps avec décalage UTC.
$ 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 comme TZ=UTC
. +00:00
peut être remplacé par Z
.
$ date -u +%FT%TZ
2013-05-03T12:59:24Z
Ce sont également des formats de date ou d’heure ISO 8601 en vigueur:
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)
Une alternative courte qui fonctionne à la fois GNU et la date BSD est:
date -u +%FT%T%z
Le paquet coreutils fournit les versions GNU des outils. Pour installer:
$ brew install coreutils
Vous pouvez voir ce qui est fourni:
$ brew list coreutils
Remarquez qu'il vient avec la date:
$ brew list coreutils | grep date
Ceci est la commande standard GNU date afin de prendre le commutateur -I:
$ gdate -I
2016-08-09
Utilisez simplement les options de formatage normales date
:
date '+%Y-%m-%d'
Edit: pour inclure le temps et UTC, ce sont équivalents:
date -u -Iseconds
date -u '+%Y-%m-%dT%k:%M:%S%z'
Ce n'est pas une fonctionnalité de Bash, c'est une fonctionnalité du binaire date
. Sous Linux, vous avez généralement GNU la version coreutils de date
, tandis que sous OSX, vous disposiez des utilitaires hérités BSD. GNU version peut certainement être installé en option, ou vous pouvez choisir votre propre remplaçant - je pense que cela devrait être une simple doublure, par exemple en Perl.
En poussant les autres réponses un peu plus loin, vous pourriez ajouter une fonction à votre ~/.bashrc ou ~/.zshrc pour ajouter la date -I
drapeau:
date() {
if [ "$1" = "-I" ]; then
command date "+%Y-%m-%dT%H:%M:%S%z"
else
command date "$@"
fi
}
Un paquetage précompilé coreutils
pour Mac OS X est disponible à l'adresse suivante: