El comando date no ofrece tal cosa, lo cual es un poco triste ya que RFC-3339 es el formato moderno, generalizado y sano que se utiliza en todas partes (excepto en el correo electrónico que no es ni moderno ni sano). 
 Mi desplazamiento de zona horaria es actualmente -08: 00, por lo que la forma más simple de este comando debería imprimir la hora actual como 2013-09-05T14:58:33.102-08:00. 
Comentarios
Respuesta
 Parece que puedes hacer varios formatos usando el cambio a la implementación GNU de date (versión 5.90 o superior), --rfc3339=. 
Ejemplos
$ date --rfc-3339=date 2014-03-19 $ date --rfc-3339=seconds 2014-03-19 18:00:05-04:00 $ date --rfc-3339=ns 2014-03-19 18:00:08.179780629-04:00 
 Si desea que se agregue T, como un truco: 
$ date --rfc-3339=seconds | sed "s/ /T/" 2014-03-19T18:35:03-04:00 
Si lo desea en milisegundos :
$ date --rfc-3339=ns | sed "s/ /T/; s/\(\....\).*\([+-]\)/\1\2/g" 2014-03-19T18:42:52.362-04:00 
Referencias
Comentarios
-  En estos días, no se necesita ningún truco para obtener el ‘ T ‘. El 
--iso-8601' option accepts the same arguments as–rfc-3339` e incluye el ‘ T ‘ en su salida. -  Sed part 
s/\(\....\).*-/\1-/gdebe sers/\(\....\).*\([+-]\)/\1\2/gpara trabajar también al este del Atlántico. - @svante – gracias por el detalle, arreglado.
 -  @Eonil que en realidad no es correcto, el RFC3339 dice: 
NOTE: ISO 8601 defines date and time separated by "T".Mientras que RFC3339 le permite usar un espacio en su lugar. Lea la ietf.org/rfc/rfc3339.txt Sección 5.6 - @ rwenz3l Mi culpa. Acabo de leer solo la parte ABNF y me perdí las notas. ¡Gracias por señalarlo!
 
Responder
 Con GNU date (5,90 o superior): 
$ TZ=America/Anchorage date "+%FT%T.%N%:z" 2014-03-19T14:29:31.041119357-08:00 
 Reemplaza %N por %3N para milisegundos, %6N para microsegundos … 
AFAIK, ninguna de las especificaciones POSIX, Unix o LSB especifica ningún comando que pueda mostrar tiempos con granularidad inferior a un segundo, pero la parte fraccionaria es opcional en RFC 3339.
 POSIX / Unix / LSB strftime admite %z para mostrar el desplazamiento TZ como -0800, así que lo más portátil que probablemente obtendrá es: 
 $ TZ=America/Anchorage perl -MPOSIX -le "$t = strftime "%Y-%m-%dT%T%z", localtime; $t =~ s/..$/:$&/; print $t" 2014-03-19T14:30:23-08:00 
Respuesta
También puede formatear la hora de acuerdo con RFC3339 (ISO8601) más fácil:
 $ date -u +"%Y-%m-%dT%H:%M:%SZ" 2016-11-08T08:52:55Z  
NOTA: Este formulario at también se utiliza en la Label Schema Convention RC 1.0
Comentarios
- Ese ‘ no es un RFC3339 válido. La respuesta de Eran ‘ de « `date +% Y-% m-% dT% T% z` « es correcta y tiene menos caracteres. Si quieres en UTC pass -u flag, que pondrá a cero el desplazamiento de la zona horaria.
 -  Con la marca 
-uesta respuesta es correcta, ¿verdad? - @briceburg, ¿por qué este RFC3339 no es válido? Según tools.ietf.org/html/rfc3339#section-5.6 , parece ser correcto hasta donde yo sé.
 
Respuesta
 GNU date tiene el formato ISO-8601 integrado, no es que ¿Muy cerca o incluso idéntico a RFC-3339? 
1065 % date --iso-8601=seconds 2014-03-19T16:51:16-0600 
Comentarios
- ISO-8601 permite diferentes formatos de fechas y horas, pero creo que el OP está pidiendo específicamente el formato Fecha W3C » Fecha completa más horas, minutos, segundos y un fracción decimal de un segundo AAAA-MM-DDThh: mm: ss.sTZD (p. ej. 1997-07-16T19: 20: 30.45 + 01: 00) » – Formatos de fecha y hora del W3C .
 
Respuesta
¿Qué tal el buen viejo:
$ date +%Y-%m-%dT%T%z 2015-10-29T14:47:06+0200 
Comentarios
- ¿Dónde está la información de la zona horaria?
 - Esto funciona tanto en mac como en linux ‘ date ‘
 - ¿Qué tal milisegundos?
 -  nota rápida aquí, sin abrir el RFC, el segmento de zona horaria, 
0200falta dos puntos, lo que puede romper algunos sistemas que lo requieren. -  La nota de @MikeMackintosh ‘ es pertinente; el resultado que se muestra aquí  no  es una fecha RFC 3339 legal. Los dos puntos en el segmento de zona horaria son necesarios para RFC 3339; consulte la definición de 
time-numoffseten tools.ietf.org/html/rfc3339#section-5.6 . 
Responder
echo "Local date only:" date "+%Y-%m-%d" echo echo "Local date and time:" date "+%Y-%m-%dT%H:%M:%S%z" | sed "s@^.\{22\}@&:@" echo echo "UTC date and time:" date -u "+%Y-%m-%dT%H:%M:%SZ" 
 Estos comandos son compatibles con POSIX, con la excepción de la %z especificación de conversión. Sin embargo, %z es ampliamente compatible y funciona de la misma manera en Linux, MacOS, FreeBSD, OpenBSD, NetBSD, DragonFlyBSD, Solaris, Minix y Haiku. También funciona con las herramientas de Busybox, Toybox y sbase (las utilidades del sistema base de suckless.org). Dado que %z genera el desplazamiento de zona horaria en formato ±HHMM, necesitamos la tubería sed para agregar dos puntos y cámbielo a ±HH:MM. 
 NOTA: El comando «s date del proyecto Heirloom tiene %z salida: no imprime un +. 
2013-09-05 14:58:33.102 -0800excepto cuando s alguna razón por la que los espacios no deben usarse en absoluto.