En un script Bash, quiero imprimir la fecha y hora actual en formato ISO 8601 (preferiblemente UTC), y parece que esto debería ser tan simple como 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, man dateno enumera esta opción.
¿Alguien sabe por qué es esto, o alguna otra forma (fácil) para que imprima la fecha en formato ISO 8601? ¡Gracias!

2011-08-27y2011-08-27T18:55:43Zson formatos ISO 8601. Y realmente, editar la pregunta sería más útil que distribuir actualizaciones en varios comentarios. Un ejemplo de lo que está intentando imprimir sería ideal.brew(que usa el prefijo 'g')gdate -Ifuncionó, junto con otros indicadores de GNU.Respuestas:
Podrías usar
O para una fecha totalmente compatible con ISO-8601 , use uno de los siguientes formatos:
Salida:
o
Salida:
fuente
date -u +"%Y-%m-%dT%H:%MZ"exactamente lo que estaba buscando.Zy+00:00son iguales (en su mayoría). A los fines de traducir el tiempo, ambos significan UTC. Sin embargo, Inglaterra es+00:00en invierno y+01:00en verano (BST).Zes UTC, mientras que+00:00es GMT. UTC no es una zona horaria y no tiene un desplazamiento; El desplazamiento se define como la diferencia horaria entre una zona horaria y UTC, el estándar de medición de tiempo. GMT es +00: 00 eliminado de UTC (y BST es, como usted dice, +01: 00 eliminado de UTC).En GNU, la fecha
date -Ies la misma quedate +%F,-Isecondsy-Iminutestambién incluye la hora con desplazamiento UTC.-ues comoTZ=UTC.+00:00puede ser reemplazado conZ.Estos también son formatos de fecha u hora ISO 8601 válidos:
Estos no son:
fuente
Una alternativa corta que funciona tanto en la fecha GNU como en la BSD es:
fuente
date -u +%FT%TZporque en UTC el desplazamiento sería cero de todos modosEl paquete coreutils proporciona versiones GNU de herramientas. Instalar:
Puedes ver lo que se proporciona:
Tenga en cuenta que viene con la fecha:
Este es el comando de fecha GNU estándar, por lo que tomará el modificador -I:
fuente
gdate --iso-8601=ns2016-09-29T16: 54: 23,485230000 + 02: 00Simplemente use las
dateopciones de formato normales :Editar: para incluir el tiempo y UTC, estos son equivalentes:
fuente
No es una característica de Bash, es una característica del
datebinario. En Linux, normalmente tendría la versión GNU coreutils dedate, mientras que en OSX tendría las utilidades heredadas BSD. La versión de GNU ciertamente se puede instalar como un paquete opcional, o puede lanzar su propio reemplazo; creo que debería ser una línea simple, por ejemplo, en Perl.fuente
Si lleva las otras respuestas un paso más allá, puede agregar una función a su ~ / .bashrc o ~ / .zshrc para agregar el
-Iindicador de fecha :fuente
Hay un
coreutilspaquete precompilado para Mac OS X disponible en:http://rudix.org/packages-abc.html#coreutils .
fuente