检查用户输入的日期是否格式正确

时间:2015-05-16 13:37:27

标签: shell unix scripting

我有一个脚本,我从用户创建的文件中获取日期字符串。日期可以是任何日期格式。需要检查字符串是否具有正确的日期格式。如果它是一个正确的日期格式,它应该继续它,否则它应该给出错误。

它可以是以下任何格式 -

YYYY/MM/DD HH24:MI:SS
YYYY/MM/DD HH24:MI
YYYY/MM/DD

到目前为止,我有以下代码 -

datetime="2100-02-31"
if ! date -d "$datetime" >/dev/null 2>&1; then
  echo "Not a date"
fi

但它总是给出“不是约会”的输出。

3 个答案:

答案 0 :(得分:0)

你有没有尝试其他日期? 2月没有31,当然它说"不是约会"。

答案 1 :(得分:0)

您输入的方式存在问题。您的原始代码应该有效。您可以按照尝试执行此操作,或尝试将命令替换date命令一起使用:

if ! $(date -d "$datetime" >/dev/null 2>&1); then
    echo "Not a date"
fi

使用 bash版本4.3.33 ,它可以使用或不使用命令替换。

简短示例

#!/bin/bash

while read -r datetime; do

    echo "  $(date -d "$datetime")"
    if ! $(date -d "$datetime" >/dev/null 2>&1); then
        echo "Not a date"
    fi

done

exit 0

<强>输入

$ cat dat/datetime.txt
2012/10/21 19:51:31
2012/10/21 19:51
2012/10/21
something goofy

<强>输出

$ bash chkdate.sh <dat/datetime.txt
  Sun Oct 21 19:51:31 CDT 2012
  Sun Oct 21 19:51:00 CDT 2012
  Sun Oct 21 00:00:00 CDT 2012
date: invalid date ‘something goofy’

Not a date

答案 2 :(得分:0)

提供的修复程序需要GNU日期。 -E 此外,就像用户界面元素一样,您可能希望让用户知道您的期望。 “非日期”答案无助于用户获得正确的格式。