Em um script Bash, desejo imprimir a data e hora atuais no formato ISO 8601 (preferencialmente UTC) e parece que isso deve ser tão simples quanto date -I
:
http://ss64.com/bash/date.html
Mas isso não parece funcionar no meu 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]
E, de fato, man date
não lista essa opção.
Alguém sabe por que isso é ou qualquer outra maneira (fácil) de imprimir a data no formato ISO 8601? Obrigado!
2011-08-27
e2011-08-27T18:55:43Z
são formatos ISO 8601. E realmente, editar a pergunta seria mais útil do que distribuir atualizações por vários comentários. Um exemplo do que você está tentando imprimir seria o ideal.brew
(que usa o prefixo 'g')gdate -I
funcionou, juntamente com outros sinalizadores do GNU.Respostas:
Você poderia usar
Ou para uma data totalmente compatível com ISO-8601 , use um dos seguintes formatos:
Resultado:
ou
Resultado:
fonte
date -u +"%Y-%m-%dT%H:%MZ"
era exatamente isso que eu estava procurando.Z
e+00:00
são os mesmos (principalmente). Para fins de tradução do tempo, ambos significam UTC. No entanto, a Inglaterra é+00:00
no inverno e+01:00
no verão (BST).Z
é UTC, enquanto+00:00
é GMT. O UTC não é um fuso horário e não possui um deslocamento; deslocamento é definido como a diferença de tempo entre um fuso horário e o UTC, o padrão de medição de tempo. GMT é +00: 00 removido do UTC (e BST é, como você diz, +01: 00 removido do UTC).Na data GNU
date -I
é o mesmo quedate +%F
, e-Iseconds
e-Iminutes
também incluem o tempo com UTC offset.-u
é comoTZ=UTC
.+00:00
pode ser substituído porZ
.Estes também são formatos de data ou hora ISO 8601 válidos:
Estes não são:
fonte
Uma alternativa curta que funciona nas datas GNU e BSD é:
fonte
date -u +%FT%TZ
porque em offset UTC seria zero de qualquer maneiraO pacote coreutils fornece versões GNU de ferramentas. Para instalar:
Você pode ver o que é fornecido:
Observe que ele vem com data:
Este é o comando padrão do GNU date, portanto, será necessário a opção -I:
fonte
gdate --iso-8601=ns
2016-09-29T16: 54: 23,485230000 + 02: 00Basta usar as
date
opções de formatação normal :Editar: para incluir hora e UTC, são equivalentes:
fonte
Não é um recurso do Bash, é um recurso do
date
binário. No Linux, você normalmente teria a versão GNU coreutilsdate
, enquanto no OSX, os utilitários herdados do BSD. A versão GNU certamente pode ser instalada como um pacote opcional, ou você pode instalar seu próprio substituto - acredito que deve ser uma linha única, por exemplo, no Perl.fonte
Tomando as outras respostas um passo adiante, você pode adicionar uma função ao seu ~ / .bashrc ou ~ / .zshrc para adicionar o
-I
sinalizador de data :fonte
Há um
coreutils
pacote pré-compilado para Mac OS X disponível em:http://rudix.org/packages-abc.html#coreutils .
fonte