O que é um comando padrão para imprimir uma data no formato RFC-3339?

15

O comando date não oferece tal coisa, o que é um pouco triste já que o RFC-3339 é o formato moderno, generalizado e sônico usado em todos os lugares (exceto em e-mail que não é moderno nem são).

Meu deslocamento de fuso horário é atualmente -08: 00, então a forma mais simples desse comando deve imprimir a hora atual como 2013-09-05T14:58:33.102-08:00 .

    
por Martin Jambon 19.03.2014 / 22:44

5 respostas

24

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 o T seja adicionado, como um hack:

$ date --rfc-3339=seconds | sed 's/ /T/'
2014-03-19T18:35:03-04:00

Se você quiser em milissegundos:

$ date --rfc-3339=ns | sed 's/ /T/; s/\(\....\).*-/-/g'
2014-03-19T18:42:52.362-04:00

Referências

por 19.03.2014 / 23:01
15

Com o GNU date (5,90 ou acima):

$ 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 especifica qualquer comando que possa exibir tempos com granularidade menor que um segundo, mas a parte fracionária é opcional no RFC 3339.

O strftime POSIX / Unix / LSB suporta %z para exibir o deslocamento TZ como -0800 , então o mais portátil que você provavelmente obterá é:

 $ 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
    
por 19.03.2014 / 23:31
8

O GNU date tem o formato ISO-8601 embutido - não é muito próximo ou mesmo idêntico ao RFC-3339?

1065 % date --iso-8601=seconds
2014-03-19T16:51:16-0600
    
por 19.03.2014 / 23:52
6

Que tal bom e velho:

$ date +%Y-%m-%dT%T%z
2015-10-29T14:47:06+0200
    
por 29.10.2015 / 13:37
3

Você também pode formatar o tempo de acordo com RFC3339 (ISO8601) mais fácil:

$ date -u +"%Y-%m-%dT%H:%M:%SZ"
2016-11-08T08:52:55Z

OBSERVAÇÃO: Esse formato também é usado na Convenção de Esquemas de Etiqueta RC 1.0

    
por 08.11.2016 / 10:07

Tags