Quiero validar el siguiente formato de fecha en el script de shell
2015-Jul-13
Estoy usando date -d "2015-Jul-13" +"%Y-%b-%d"pero está dando error como
date: invalid date '2015-Jul-13'
shell-script
date
chhaya vishwakarma
fuente
fuente

dateno reconoceYYYY-MMM-DD. ¿Podrías usarYYYY-MM-DDo en suDD MMM YYYYlugar?atsí, y creotouchque también. Escribí un funvtion fecha de cáscara de validación basado entouchuna vez ... No, notouch- que sólo se ocupa de los números, peroathace algunos análisis muy profundo ...Respuestas:
GNU
dateno es compatibleYYYY-MMM-DD. Sin embargo, lo entiendeDD-MMM-YYYY. Entonces, si realmente tiene que manejar las fechas de este formato, puede hacerlo con algo como esto, que simplemente intercambia los argumentos a un formato quedateespera:Aquí hay una solución completa. Desglosándolo, las
IFS=-instrucciones le dicen al shell que divida una línea de comando próxima por guión en-lugar de espacios en blanco. Elset $ymdanálisis sintáctico de la$ymdvariable como una línea de comandos, pero ahora se divide por el guión, la asignación de valores a los parámetros$1,$2y siguientes . Elecho "$3-$2-$1"trivial muestra los tres valores capturados en orden inverso.fuente
ymd=$(IFS=-;set $ymd; echo "$3-$2-$1")¿Podrías revelar la magia detrás delsetcomando?Desde la página de manual: -
Pero parece no reconocer el
YYYY-MMM-DDformato. Por lo tanto, puede usar desde abajo o similar como:¡O tiene que convertirlo / formatearlo antes de enviarlo
date!Consulte también ¿Cómo se especifica un formato para la entrada hasta la fecha?
Recomiendo visitar: formatos de entrada de fecha .
enfatizado por mí
¡Aquí puedes ver que no hay formato como año-mes-día ! (durante meses se escriben literalmente)
fuente
Con
zshusted podría usar elstrftimebuiltin (disponible a través dezsh/datetime) con-r(reverso):que usa el formato para analizar la cadena de tiempo y generar el número de segundos desde la época:
Esto elimina el error si la fecha no es válida:
También puede convertir los segundos desde época a cualquier otro formato de fecha estándar / personalizado, por ejemplo
fuente