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
date
no reconoceYYYY-MMM-DD
. ¿Podrías usarYYYY-MM-DD
o en suDD MMM YYYY
lugar?at
sí, y creotouch
que también. Escribí un funvtion fecha de cáscara de validación basado entouch
una vez ... No, notouch
- que sólo se ocupa de los números, peroat
hace algunos análisis muy profundo ...Respuestas:
GNU
date
no 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 quedate
espera: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 $ymd
análisis sintáctico de la$ymd
variable como una línea de comandos, pero ahora se divide por el guión, la asignación de valores a los parámetros$1
,$2
y 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 delset
comando?Desde la página de manual: -
Pero parece no reconocer el
YYYY-MMM-DD
formato. 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
zsh
usted podría usar elstrftime
builtin (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