Como Transformar formato de data? [RESOLVIDO]

1. Como Transformar formato de data? [RESOLVIDO]

Newton Teixeira
Newtonjr.

(usa CentOS)

Enviado em 20/09/2013 - 10:44h


Olá comunidade, peço ajuda no seguinte:

Estou fazendo um script que recebe uma data qualquer no formato DD/MM/YYYY.
Preciso transformar essa data para o formato MESDDYY, onde MES é a SIGLA do mês, DD é o dia e YY os dois últimos números do ano.

Exemplo: 18/09/2013 -> set0913. Se o usuário chamar o script com '*', o script atribui a data atual e a transforma no formato (código abaixo).

if [ $1 = '*' ]; then
nomeArq=`date +%b%d%y | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ ÁÂÃÉÊÍÓÔÕÚÇ/abcdefghijklmnopqrstuvwxyzàáâãéêíóôõúç/'`

else
data=TRANSFORMAÇÃO($1)
fi

Como fazer isso para qualquer outra data?
Agradeço desde já pela atenção e fico no aguardo.


  


2. MELHOR RESPOSTA

Fernando
phoemur

(usa Debian)

Enviado em 20/09/2013 - 21:05h

para transformar use por exemplo:


echo "18/09/2013" | awk -F'/' '{print $2FS$1FS$3}' | xargs -i date -d'{}' +%b%d%y


Ou então


echo "18/09/2013" | sed 's@^\([0-9]\+\)/\([0-9]\+\)/\([0-9]\+\)@\2/\1/\3@' | xargs -i date -d'{}' +%b%d%y



Tirando os pipes:

date -d"$(echo "18/09/2013" | awk -F'/' '{print $2FS$1FS$3}')" +%b%d%y


Tenho um script pronto aqui mas não vou postar pois perde a graça...rs
Abraços fraternos

3. Re: Como Transformar formato de data? [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 20/09/2013 - 17:35h

Colega, para cada caso é um caso. Tudo depende de como a data for enviada!

No seu script, vc pode substituir a linha gigantesca do sed por esta abaixo, contudo a entrada não pode conter acentuação.


date +%b%d%y | tr 'A-Z' 'a-z'



4. Re: Como Transformar formato de data? [RESOLVIDO]

Newton Teixeira
Newtonjr.

(usa CentOS)

Enviado em 20/09/2013 - 17:53h

Mas como transformar uma data qualquer no formato MESDDYY ?

A data será um parâmetro de entrado do shell script.

Preciso urgentemente transformar DD/MM/YYYY em MESDDYY. Como fazer?


5. Re: Como Transformar formato de data? [RESOLVIDO]

Newton Teixeira
Newtonjr.

(usa CentOS)

Enviado em 23/09/2013 - 09:19h

Só teve um probleminha: é que a saída coloca o primeira letra do mês em maiúsculo; tipo se script for chamado com '18/09/2013', a saída seria 'Set1813'.

Eu dei uma "corrigida" para o meu cenário, ficou assim:

if [ $1 = '*' ]; then
nomeArq=`date +%b%d%y | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ ÁÂÃÉÊÍÓÔÕÚÇ/abcdefghijklmnopqrstuvwxyzàáâãéêíóôõúç/'`
else
nomeArq=`echo "$1" | awk -F'/' '{print $2FS$1FS$3}' | xargs -i date -d'{}' +%b%d%y | tr '[A-Z]' '[a-z]'`
fi

onde $1, é a data como parâmetro de entrada número 01 no formato DD/MM/YYYY; se o script for chamado com '*', significa que a data deve ser a data atual e/ou corrente. Lembrando que ainda vou testar, pois o resultado deve ser atribuído para a variável 'nomeArq'.

Muito obrigado pela resposta nobre colega. Se não se importar, deixe eu ver a sua função. Pode ser mais elegante e/ou útil para outros em outros cenários..Um grande abraço companheiro.

PS: Para o caso default '*', eu poderia colocar a para executar o arquivo da data anterior. No caso, comando deveria ser:

date -d "yesterday" +%b%d%y | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ ÁÂÃÉÊÍÓÔÕÚÇ/abcdefghijklmnopqrstuvwxyzàáâãéêíóôõúç/'

Eis uma pequena dica se alguém precisar.



6. Re: Como Transformar formato de data? [RESOLVIDO]

Fernando
phoemur

(usa Debian)

Enviado em 23/09/2013 - 15:38h


#!/bin/bash

[ $# -gt 1 ] && exit1

function converter () {
local months=( JAN FEV MAR ABR MAI JUN JUL AGO SET OUT NOV DEZ )
local i
for (( i=0; i<12; i++ )); do
if [ $(echo $1 | cut -d'/' -f2 | tr -d '0') = "$i" ]; then
let i--
printf "%3s%02d%02d\n" $(echo ${months[$i]}) $(echo $1 | cut -d'/' -f1) $(echo $1 | cut -d'/' -f3 | sed 's/.*\(..\)$/\1/')
break
fi
done
}

if [ "$1" = '*' ]; then
converter "$(date +%d/%m/%Y)"
else
converter $1
fi


Mas usa o comando date como você está fazendo que é mais fácil






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts