Observe que date -d é uma extensão do GNU. A sintaxe esperada é fixa e independente da localidade. Em particular, não usa POSIX getdate() para analisar a data (mesmo que a interface GNU date use também seja chamada de getdate() ).
Algumas compilações de algumas versões do busybox também reconhecem uma opção -d , mas o intervalo de formatos suportados é mais restrito. Em particular, não reconhece mm/dd/YYYY . Você pode, no entanto, passar uma opção -D <strptime-format> (obrigado @BinaryZebra) para especificar o formato que você gosta:
$ date -D %d/%m/%Y -d 01/10/2016
Sat Oct 1 00:00:00 BST 2016
AT & T ( ast-open ) date , desde 1995, também suporta uma opção -d no estilo GNU . Aquele usa POSIX getdate() . Portanto, com essa implementação de date , você pode usar a variável DATEMSK para alterar a maneira como as datas são analisadas e, desde 1996, você pode usar the -p option para passar um formato de análise de estilo strptime na linha de comando:
$ date --version
version date (AT&T Research) 2011-01-27
$ date -d 01/10/2016
Sun Jan 10 13:36:39 GMT 2016
$ date -d 01/10/2016 -p %d/%m/%Y
Sat Oct 1 13:36:51 BST 2016
O AT & T ksh93 ' printf %T também usa uma API getdate() -compatível e, portanto, também pode ser afetado pela variável DATEMSK , portanto, no ksh93, você pode fazer:
$ DATEMSK=/dev/stdin <<< %d/%m/%Y printf '%T\n' 01/10/2016
Sat Oct 1 13:47:06 BST 2016
Para analisar uma data portável em um script zsh , você pode usar o strftime builtin (após carregá-lo) com a opção -r :
$ zmodload zsh/datetime
$ strftime -s REPLY -r '%d/%m/%Y' 09/07/2016
$ strftime %c $REPLY
Sat 09 Jul 2016 00:00:00 BST
zsh strftime -r usa POSIX strptime() para analisar a sequência. Como tal, é dependente do local. Em uma localidade francesa, por exemplo, você pode usar strftime -r %d-%b-%Y 14-juillet-2016 para analisar uma data em francês.
Algumas implementações de strptime() como o GNU ainda aceitam os nomes de mês / dia em inglês quando em localidades diferentes do inglês, mas não em todos (o Solaris 11 não o faz por exemplo). Algo a ter em mente ao analisar uma data em inglês na localidade do usuário.
As versões recentes de bash também possuem um estilo de% kshprintf '%(format)T', mas esse não tem capacidade de análise de tempo.
Para ser completo, nos BSDs, date aceita um -f <strptime-format> que você pode usar em combinação com -j para reformatar uma data:
$ date -jf %d/%m/%Y 01/10/2016
Sat Oct 1 13:47:06 BST 2016