Linux Bash验证日期
我正在写一个shell脚本,不明白为什么我的日期验证代码不起作用。我对发现的类似问题尝试了以下解决方案,但is_valid始终设置为1:Linux Bash验证日期,linux,bash,macos,validation,date,Linux,Bash,Macos,Validation,Date,我正在写一个shell脚本,不明白为什么我的日期验证代码不起作用。我对发现的类似问题尝试了以下解决方案,但is_valid始终设置为1: date "+%m/%d/%Y" -d "$1" 2>1 > /dev/null //or.. date -d "2012-02-29" > /dev/null 2>&1 is_valid=$? #always set to 1, even when given a valid date 如何正确验证日期格式?日期仅在格式为M
date "+%m/%d/%Y" -d "$1" 2>1 > /dev/null
//or..
date -d "2012-02-29" > /dev/null 2>&1
is_valid=$?
#always set to 1, even when given a valid date
如何正确验证日期格式?日期仅在格式为MM/DD/YYYY时有效
我也尝试过这个解决方案:但它也总是拒绝日期。我想出了这个小功能:
function isDateInvalid()
{
date -d "$1" "+%m/%d/%Y" > /dev/null 2>&1
res=$?
echo "$res"
}
isDateInvalid "2012-02-219"
1
isDateInvalid "2012-02-29"
0
Mac OS X附带的BSD
date
不支持-d
选项(或者更确切地说,它使用-d
实现完全不同的功能)。安装GNUdate
,或使用以下命令验证输入字符串:
date -f "%Y-%m-%d" -j "2012-02-29" >/dev/null 2>&1
-f
提供输入格式,-j
告诉date
只输出日期,而不尝试设置系统时钟
for y in {2013..2014}; do
for m in {01..12}; do
for d in {01..31}; do
[[ ! "`date -jf %Y%m%d $y$m$d +%Y%m%d`" = "$y$m$d" ]] && continue
echo $y.$m.$d
done
done
done
如果字符串匹配,循环将继续 我没有经历同样的结果。当我运行
date-d“2012-02-29>/dev/null 2>&1”然后运行“echo$?”时,我得到了0`。date--version
为您打印了什么?(顺便说一句,我得到的结果与Mbrach和Aleksey Izmailov的结果相同。)它打印:“日期:非法选项--\n用法:日期…”我使用的是Mac OSX,但你现在发现,Mac OS X不是Linux,GNU扩展不一定在非Linux机器上工作。有时,困难在于确定什么时候是扩展名。顺便说一句,MM/DD/YYYY
是一种选择得很差的日期格式,它与DD/MM/YYYY
非常不明确。使用YYYY-MM-DD
可以正确排序并且符合RFC。这些行之间没有任何内容。我真的是一个回声$?命令之后,它总是打印1