Não é possível usar o comando date para alterar o formato de data específico no shell Bash no terminal OS X

3

Estou usando o comando date -d para alterar um formato de data específico para outro. Abaixo está o exemplo usado

currDate='Wed 12 Feb 2014'
formattedDate='date -d"${currDate}" +%Y%m%d'
echo $formattedDate
    
por Learner 18.02.2014 / 16:46

2 respostas

6

Você não deve usar backticks ( ' ) a menos que você esteja atribuindo o resultado de um comando a uma variável, neste caso você está atribuindo uma string, então você deve simplesmente citá-la:

currDate="Wed 12 Feb 2014"
formattedDate='date -d"${currDate}" +%Y%m%d'
echo $formattedDate

Eu não tenho acesso a um mac, então não posso testar isso, mas de acordo com a página do OSX date man, isso deve funcionar:

formattedDate='date -jf "%a %d %b %Y" "${currDate}" +%Y%m%d'

Muitos dos utilitários do OSX são baseados nas versões BSD do mesmo, portanto, as informações que você encontra no Linux nem sempre são traduzidas para o OSX. De man date no OSX:

 -f      Use input_fmt as the format string to parse the new_date provided
         rather than using the default [[[mm]dd]HH]MM[[cc]yy][.ss] format.

 -j      Do not try to set the date.  This allows you to use the -f flag in 
         addition to the + option to convert one date format to another.
    
por 18.02.2014 / 16:53
7

Eu testei o seguinte no meu OSX que funcionou:

currDate="Wed 12 Feb 2014"
formattedDate='date -v"${currDate}" +%Y%m%d'
echo $formattedDate

A partir da página de manual -v é:

Adjust (i.e., take the current date and display the result of the adjustment; not actually set the date) the second, minute, hour, month day, week day, month or year according to val. If val is preceded with a plus or minus sign, the date is adjusted forwards or backwards according to the remaining string, otherwise the relevant part of the date is set. The date can be adjusted as many times as required using these flags. Flags are processed in the order given.

Isso receberá a resposta certa:

date -jf"%a %e %b %Y" "Wed 12 Feb 2014" +%Y%m%d

A saída é:

20140212
    
por 18.02.2014 / 17:09