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