检查用户在UNIX中输入的日期和时间

时间:2011-01-06 12:11:40

标签: unix shell unix-timestamp

我有一个Shell脚本,它使用用户输入的日期和时间参数。 日期为mm / dd / yyyy,时间为HH:MM。 什么是检查用户输入正确日期最简单的方法[像月份应该少于12 ....对于时间MM应该小于60 ... 我们在UNIX中是否有任何内置函数来检查时间戳?

3 个答案:

答案 0 :(得分:2)

您可以使用unix date 工具为您解析并验证它,并测试返回代码,例如。

有效日期,返回代码为0:

joel@bohr:~$ date -d "12/12/2000 13:00"
Tue Dec 12 13:00:00 GMT 2000
joel@bohr:~$ echo $?
0

无效日期,返回代码1:

joel@bohr:~$ date -d "13/12/2000 13:00"
date: invalid date `13/12/2000 13:00'
joel@bohr:~$ echo $?
1

您可以使用 + FORMAT 选项(man date

更改日期接受的输入格式

将所有内容整合在一起作为一个小脚本:

usrdate=$1
date -d "$usrdate"  > /dev/null 2>&1
if [ $? -eq 0 ]; then
        echo "Date $usrdate was valid"
else
        echo "Date $usrdate was invalid"
fi

答案 1 :(得分:0)

您可以使用grep检查输入是否符合正确的格式:

if ! echo "$INPUT" | grep -q 'PATTERN'; then
   # handle input error
fi

其中 PATTERN 是一个常规表达式,匹配所有有效输入和仅有效输入。我将这种模式留给你; - )。

答案 2 :(得分:0)

(迟到的答案)

你可以使用的东西:

...
DATETIME=$1

#validate datetime..
tmp=`date -d "$DATETIME" 2>&1` ; #return is: "date: invalid date `something'"
if [ "${tmp:6:7}" == "invalid" ]; then
    echo "Invalid datetime: $DATETIME" ;
else
    ... valid datetime, do something with it ...
fi