O comando date não oferece tal coisa, o que é meio triste, já que RFC-3339 é o formato moderno, difundido e lógico usado em todos os lugares (exceto em e-mail, que não é moderno nem lógico). 
 Meu deslocamento de fuso horário atualmente é de -08: 00, então a forma mais simples deste comando deve imprimir a hora atual como 2013-09-05T14:58:33.102-08:00. 
Comentários
Resposta
 Parece que você pode fazer vários formatos usando a mudança para a implementação GNU de date (versão 5.90 ou superior), --rfc3339=. 
Exemplos
$ 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 
 Se você quiser que T seja adicionado, como um hack: 
$ date --rfc-3339=seconds | sed "s/ /T/" 2014-03-19T18:35:03-04:00 
Se quiser em milissegundos :
$ date --rfc-3339=ns | sed "s/ /T/; s/\(\....\).*\([+-]\)/\1\2/g" 2014-03-19T18:42:52.362-04:00 
Referências
Comentários
-  Atualmente, nenhum hack é necessário para obter o ‘ T ‘. O 
--iso-8601' option accepts the same arguments as–rfc-3339`, e inclui o ‘ T ‘ em seu saída. -  parte Sed 
s/\(\....\).*-/\1-/gdeve sers/\(\....\).*\([+-]\)/\1\2/gpara também funcionar a leste do Atlântico. - @svante – obrigado pelo detalhe, corrigido.
 -  @Eonil que na verdade não está correto, o RFC3339 afirma: 
NOTE: ISO 8601 defines date and time separated by "T".Enquanto o RFC3339 permite que você use um espaço em vez disso. Leia a ietf.org/rfc/rfc3339.txt Seção 5.6 - @ rwenz3l Minha culpa. Acabei de ler apenas parte do ABNF e perdi as notas. Obrigado por apontar!
 
Resposta
 Com GNU date (5,90 ou superior): 
$ TZ=America/Anchorage date "+%FT%T.%N%:z" 2014-03-19T14:29:31.041119357-08:00 
 Substitua %N por %3N por milissegundos, %6N por microssegundos … 
AFAIK, nenhuma das especificações POSIX, Unix ou LSB especificam qualquer comando que possa exibir tempos com granularidade de sub-segundo, mas a parte fracionária é opcional no RFC 3339.
 POSIX / Unix / LSB strftime suporta %z para exibir o deslocamento TZ como -0800, então o mais portátil que você provavelmente terá é: 
 $ 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 
Resposta
Você também pode formatar o tempo de acordo com RFC3339 (ISO8601) mais facilmente:
 $ date -u +"%Y-%m-%dT%H:%M:%SZ" 2016-11-08T08:52:55Z  
NOTA: Este formulário at também é usado na Convenção de esquema de rótulo RC 1.0
Comentários
- Esse ‘ não é um RFC3339 válido. A resposta de Eran ‘ de “ `data +% Y-% m-% dT% T% z` “ está correta e com menos caracteres. Se você quiser passar UTC -u sinalizador, que zera a diferença de fuso horário.
 -  Com o sinalizador 
-u, esta resposta está correta, certo? - @briceburg por que este não é válido RFC3339? De acordo com tools.ietf.org/html/rfc3339#section-5.6 , parece estar correto, tanto quanto posso dizer.
 
Resposta
 GNU date tem o formato ISO-8601 embutido – não é isso bastante próximo ou mesmo idêntico ao RFC-3339? 
1065 % date --iso-8601=seconds 2014-03-19T16:51:16-0600 
Comentários
- ISO-8601 permite diferentes formatação de datas e horas, mas acho que o OP está solicitando especificamente o formato de W3C Date ” Data completa mais horas, minutos, segundos e um fração decimal de um segundo AAAA-MM-DDThh: mm: ss.sTZD (por exemplo, 1997-07-16T19: 20: 30.45 + 01: 00) ” – Formatos de data e hora W3C .
 
Resposta
Que tal o bom e velho:
$ date +%Y-%m-%dT%T%z 2015-10-29T14:47:06+0200 
Comentários
- Onde estão as informações de fuso horário?
 - Isso funciona tanto no Mac quanto no Linux ‘ date ‘
 - Que tal milissegundos?
 -  observação rápida aqui, sem abrir o RFC, o segmento de fuso horário, 
0200está faltando dois pontos, o que pode quebrar alguns sistemas que exigem isso. -  @MikeMackintosh ‘ A nota é pertinente; a saída mostrada aqui  não  é uma data RFC 3339 válida. Os dois pontos no segmento de fuso horário são necessários para RFC 3339; veja a definição de 
time-numoffsetem tools.ietf.org/html/rfc3339#section-5.6 . 
Resposta
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" 
 Esses comandos são compatíveis com POSIX, com a exceção da %z especificação de conversão. No entanto, %z é amplamente suportado e funciona da mesma maneira em Linux, MacOS, FreeBSD, OpenBSD, NetBSD, DragonFlyBSD, Solaris, Minix e Haiku. Ele também funciona com as ferramentas no Busybox, Toybox e sbase (os utilitários do sistema de base suckless.org). Uma vez que %z gera o deslocamento de fuso horário no formato ±HHMM, precisamos do sed pipe para adicionar dois pontos e altere-o para ±HH:MM. 
 NOTA: O comando Heirloom project “s date tem incompatível %z saída: não imprime um sinal +. 
2013-09-05 14:58:33.102 -0800, exceto quando houver s alguma razão pela qual os espaços não devem ser usados.