Como converter data do formato numérico para o formato String?

0

Minha entrada é [10/04/16 01:02:03 BST] .Como posso converter para Apr 10 16 01:02:03 ? E eu não quero substituir / to - .

    
por Vishwaroopa 29.06.2016 / 08:29

2 respostas

1

Usando o awk:

$ echo '[10/04/16 01:02:03 BST]' | awk -F'[][/: ]' 'BEGIN{split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",m,/ /)} {print m[$3+0],$2,$4,$5":"$6":"$7}'
Apr 10 16 01:02:03

Como funciona

  • -F'[][/: ]'

    Isso define o separador de campo como% de[, ] , / , : ou em branco.

  • BEGIN{split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",m,/ /)}

    Isso define uma matriz m que contém os nomes dos meses

  • print m[$3+0],$2,$4,$5":"$6":"$7

    Isto imprime a data no novo formato.

Entrada alternativa com barras invertidas

Se houver barras invertidas na entrada, podemos ignorá-las adicionando a barra invertida à nossa lista de separadores de campos:

$ echo '\[10\/04\/16 01:02:03 BST\]' | awk -F'[][/: \\]+' 'BEGIN{split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",m,/ /)} {print m[$3+0],$2,$4,$5":"$6":"$7}'
Apr 10 16 01:02:03
    
por 29.06.2016 / 08:41
1

Dependendo da sua versão de date (sistemas baseados em GNU), isso fará o truque.

date -jf '[%d/%m/%y %T BST]' '[10/04/16 01:02:03 BST]' +'%b %d %g %T'

Datas ou horários inválidos, como dia inválido ou mês inválido, causam um erro. Portanto, isso não funcionará.

date -jf '[%d/%m/%y %T BST]' '[10/13/16 01:02:03 BST]' +'%b %d %g %T'

Dias após o final de um mês até o mês seguinte, portanto, isso é "encadernado" até 02 de março de 01:02:03.

date -jf '[%d/%m/%y %T BST]' '[31/02/16 01:02:03 BST]' +'%b %d %g %T'
    
por 11.07.2016 / 05:04

Tags