bash macos iso8601

bash timestamp



El comando `date` en OS X no tiene la opciĆ³n`-I` de ISO 8601? (7)

El paquete coreutils proporciona versiones de herramientas GNU. Instalar:

$ brew install coreutils

Puedes ver lo que se proporciona:

$ brew list coreutils

Observe que viene con la fecha:

$ brew list coreutils | grep date

Este es el comando de fecha estándar de GNU, por lo que tomará el cambio -I:

$ gdate -I 2016-08-09

En un script Bash, quiero imprimir el datetime actual en formato ISO 8601 (preferiblemente UTC), y parece que esto debería ser tan simple como la date -I :

http://ss64.com/bash/date.html

Pero esto no parece funcionar en mi 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]

Y, de hecho, la man date no muestra esta opción.

¿Alguien sabe por qué esto es, o cualquier otra (fácil) forma de imprimir la fecha en formato ISO 8601? ¡Gracias!


En la fecha de date -I GNU: " -Iseconds -Iminutes mismo que la date +%F y "Los -Iseconds y -Iminutes también incluyen el tiempo con el desplazamiento 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 es como TZ=UTC . +00:00 puede ser reemplazado por Z

$ date -u +%FT%TZ 2013-05-03T12:59:24Z

Estos también son formatos válidos de fecha u hora ISO 8601:

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)

Estos no son:

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)



No es una característica de Bash, es una característica del binario de date . En Linux normalmente tendrías la versión de date de coreutils de GNU, mientras que en OSX tendrías las utilidades heredadas de BSD. La versión de GNU puede ciertamente instalarse como un paquete opcional, o puede hacer rodar su propio reemplazo. Creo que debería ser un simple trazador de líneas, por ejemplo, en Perl.


Podrías usar

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

O para una fecha totalmente compatible con ISO-8601 , use uno de los siguientes formatos:

date -u +"%Y-%m-%dT%H:%M:%SZ"

Salida:

2011-08-27T23:22:37Z

o

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

Salida:

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


Simplemente use las opciones normales de formato de date :

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

Editar: para incluir la hora y UTC, estos son equivalentes:

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


Una alternativa corta que funciona tanto en fecha GNU como en BSD es:

date -u +%FT%T%z