Desejo validar o formato da data abaixo no shell script
2015-Jul-13
Estou usando, date -d "2015-Jul-13" +"%Y-%b-%d"
mas está dando erro como
date: invalid date '2015-Jul-13'
shell-script
date
chhaya vishwakarma
fonte
fonte
date
não reconheceYYYY-MMM-DD
. Você poderia usarYYYY-MM-DD
ouDD MMM YYYY
preferir?at
sim, e - eu acho -touch
também. Eu escrevi um funvtion data shell de validação com base emtouch
uma vez ... Não, nãotouch
- ele só lida com números, masat
faz alguma análise bastante profunda ...Respostas:
O GNU
date
não suportaYYYY-MMM-DD
. No entanto, ele entendeDD-MMM-YYYY
. Portanto, se você realmente precisa lidar com datas desse formato, pode fazê-lo com algo assim, que simplesmente troca os argumentos para um formato quedate
espera:Aqui está uma solução totalmente shell. Por fim, as
IFS=-
instruções dizem ao shell para dividir uma próxima linha de comando por hífen, em-
vez de espaço em branco. Eleset $ymd
analisa a$ymd
variável como em uma linha de comando, mas agora é dividida por hífen, atribuindo valores aos parâmetros$1
,$2
e seq . Oecho "$3-$2-$1"
trivialmente gera os três valores capturados em ordem inversa.fonte
ymd=$(IFS=-;set $ymd; echo "$3-$2-$1")
você poderia revelar a mágica por trás doset
comando?Da página de manual: -
Mas parece não reconhecer o
YYYY-MMM-DD
formato. Então, você pode usar abaixo ou similar, como:OU você deve convertê - lo / formatá- lo antes de enviá - lo para
date
!Consulte também Como você especifica um formato para a entrada até a data?
Eu recomendo visitar: formatos de entrada de data .
enfatizado por mim
Aqui você pode ver que não há formato como ano-mês-dia ! (por meses são escritos literalmente)
fonte
Com
zsh
você poderia usar ostrftime
builtin (disponível viazsh/datetime
) com-r
(reverso):que usa o formato para analisar a timesting e gerar o número de segundos desde a época:
Isso ocorre se a data for inválida:
Você também pode converter os segundos desde a época para qualquer outro formato de data padrão / personalizado, por exemplo
fonte