267 votes

La commande `date` sous OS X n'a pas l'option `-I` de la norme ISO 8601 ?

Dans un script de Bash, je veux imprimer l'heure actuelle en 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 mentionne pas cette option.

Quelqu'un sait-il pourquoi il en est ainsi, ou existe-t-il un autre moyen (facile) d'imprimer la date au format ISO 8601 ? Merci !

2 votes

Pour clarifier, je veux une date ISO 8601 complète, y compris l'heure, et de préférence dans le fuseau horaire UTC.

0 votes

Il est préférable d'éditer la question. Quel format voulez-vous pour l'heure ?

0 votes

@Tom : ok, édité. Par format, la norme ISO 8601 n'est-elle pas assez spécifique ?

430voto

amit_g Points 15415

Vous pourriez utiliser

date "+%Y-%m-%d"

Ou pour une 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

o

date +%Y-%m-%dT%H:%M:%S%z

Sortie :

2011-08-27T15:22:37-0800

7 votes

Techniquement, le "T" est recommandé mais facultatif dans la norme ISO 8601. L'utilisation d'un espace au lieu du 'T' serait : date -u + "%Y-%m-%d %H-%M-%SZ".

0 votes

Enfin ! J'ai ajouté ceci à mon bash_alias

0 votes

Ouaip, réponse géniale Merci !, mais ceci date -u +"%Y-%m-%dT%H:%MZ" exactement ce que je cherchais.

74voto

Lri Points 8342

Dans la date GNU date -I est la même chose que date +%F y -Iseconds y -Iminutes incluent également l'heure avec le 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 c'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 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 n'est pas le cas :

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)

4 votes

Hourra pour +"%FT%T%z" c'est exactement ce dont j'avais besoin

8voto

Tom Zych Points 5577

Il suffit d'utiliser la méthode normale date les options de formatage :

date '+%Y-%m-%d'

Edit : pour inclure le temps et UTC, ceux-ci sont équivalents :

date -u -Iseconds

date -u '+%Y-%m-%dT%k:%M:%S%z'

0 votes

J'ai ajouté un commentaire à mon OP en précisant que je veux la date complète, y compris l'heure, et de préférence dans le fuseau horaire UTC. Merci pour le conseil, cependant !

3voto

tripleee Points 28746

Ce n'est pas une caractéristique de Bash, c'est une caractéristique de l' date binaire. Sous Linux, vous avez généralement la version GNU coreutils de date alors que sous OSX, vous disposez des utilitaires hérités de BSD. La version GNU peut certainement être installée en tant que paquetage optionnel, ou vous pouvez créer votre propre remplacement - je pense qu'il devrait s'agir d'une simple ligne unique, par exemple en Perl.

0 votes

Intéressant, merci. Je suis un peu un noob de Mac/Linux/Unix/Bash ; pourriez-vous élaborer sur coreutils et comment l'installer sur Mac ? Merci !

2voto

tonyk Points 11

Il y a une version précompilée de coreutils pour Mac OS X, disponible à l'adresse suivante

http://rudix.org/packages-abc.html#coreutils .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X