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 date
no 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-27
y2011-08-27T18:55:43Z
son 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 -I
funcionó, 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.Z
y+00:00
son iguales (en su mayoría). A los fines de traducir el tiempo, ambos significan UTC. Sin embargo, Inglaterra es+00:00
en invierno y+01:00
en verano (BST).Z
es UTC, mientras que+00:00
es 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 -I
es la misma quedate +%F
,-Iseconds
y-Iminutes
también incluye la hora con desplazamiento UTC.-u
es comoTZ=UTC
.+00:00
puede 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%TZ
porque 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=ns
2016-09-29T16: 54: 23,485230000 + 02: 00Simplemente use las
date
opciones 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
date
binario. 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
-I
indicador de fecha :fuente
Hay un
coreutils
paquete precompilado para Mac OS X disponible en:http://rudix.org/packages-abc.html#coreutils .
fuente