Como você especifica um formato para a entrada até a data?

14

Considerando uma data e hora em um formato que não é reconhecido por date , como posso obter date para reconhecer a data e a hora?

Por exemplo:

$ date -d "09SEP2012:23:58:46"
date: invalid date '09SEP2012:23:58:46'
$ date -d "09SEP2012:23:58:46" --magic-option "ddMMMYYY:hh:mm:ss"
Sun Sep  9 23:58:46 MDT 2012

Existe --magic-option ? Se não, existe uma maneira mais elegante de resolver isso em vez de usar sed para transformar a entrada em uma string de data bem formada?

    
por Cory Klein 26.11.2012 / 23:08

2 respostas

9

Nem o POSIX nem a data do GNU têm --magic-option . O FreeBSD chama -f (com uma sintaxe parecida com os especificadores de formato de saída de date , não aquele que você propõe).

Sua data está muito perto de ser reconhecida pela data GNU: basta substituir o cólon que separa a data da hora por um espaço.

date -d "$(echo "09SEP2012:23:58:46" | sed 's/:/ /')"
    
por 27.11.2012 / 01:42
2

Eu escrevi um monte de ferramentas ( dateutils ) que lidam com datas e horários de uma forma mais amigável ao script. Sua opção mágica é --input-format|-i , por exemplo:

dconv -i '%d%b%Y:%H:%M:%S' "09SEP2012:23:58:46"
=>
  2012-09-09T23:58:46

Embora dconv não suporte diretamente o formato de saída de date (ele não concede TZ nem nada no ambiente), há uma ferramenta strptime em dateutils que suporta o especificador de formato %Z .

    
por 27.11.2012 / 06:58

Tags