检查日期参数是否为 yyyy-mm-dd 格式

lou*_*gle 6 ksh shell-script date

有没有办法检查日期参数的格式是否正确(YYYY-MM-DD)?

我从网上得到了这个,但它对我不起作用:

date "+%Y-%m-%d" -d "2015-10-11" > /dev/null  2>&1
echo $?
Run Code Online (Sandbox Code Playgroud)

我期待一个0结果,但事实并非如此。有人可以告诉一些其他方式吗?

A.P*_*.P. 9

这将检查bash(使用内置正则表达式匹配)中的正确格式(YYYY-MM-DD ):

if [[ $1 =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]
  then echo "Date $1 is in valid format (YYYY-MM-DD)"
  else echo "Date $1 is in an invalid format (not YYYY-MM-DD)"
fi
Run Code Online (Sandbox Code Playgroud)

跑:

./script.sh 2015-12-10

输出:

Date 2015-12-10 is in valid format (YYYY-MM-DD)

它不检查日期本身是否有效,只检查格式(如问题中所述,“检查日期参数的格式是否正确(YYYY-MM-DD”))

如果您需要检查日期格式验证日期值,请尝试以下操作:

if [[ $1 =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]] && date -d "$1" >/dev/null
      then echo "Date $1 is valid and matches the format (YYYY-MM-DD)"
fi
Run Code Online (Sandbox Code Playgroud)

这将丢弃通过正则表达式匹配的无效日期,例如 0000-88-77。

(此建议归功于@glenn jackman。)

  • 我还将使用`if [[ ... ]] && date -d "$1" >/dev/null` 来验证格式和实际值——丢弃通过正则表达式的无效日期,如 9999-99-99匹配。 (2认同)