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)
Hay un paquete coreutils
precompilado para Mac OS X disponible en:
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