O GNU date
faz o possível para analisar sua entrada, mas alguns formatos são inerentemente ambíguos.
O BSD date
permite (ou praticamente requer) que você especifique um formato de entrada com -f
e depois simplesmente analisa sua entrada de acordo com isso, emitindo um erro se a entrada não corresponder ao formato.
Esperar ou exigir ferramentas padrão para suportar um formato de data ilógico e aleatório como o seu parece mal direcionado, de qualquer maneira. As ferramentas padrão devem suportar formatos padrão, e acho que você vai achar que, no longo prazo, faz sentido que seus scripts e programas usem um formato de computador interno. Para fazer interface com humanos com comportamentos estranhos, é fácil escrever uma função simples de invólucro de shell como
Wackydate () {
local day # local is a Bashism
local mon
local year
year=${1%????}
mon=${1#$year??}
day=${1#$year}
day=${day%$mon}
shift
date -d "$year$mon$day" "$@"
}
As substituições de parâmetro do shell ${variable#prefix}
e ${variable%suffix}
retornam o valor de variable
com qualquer correspondência de caractere curinga na expressão após #
ou %
removidas no início ou no final, respectivamente.