2011-01-06 55 views
4

我有一個Shell腳本,它使用用戶輸入的日期和時間參數。 日期爲mm/dd/yyyy,時間爲HH:MM。 什麼是最簡單的方法來檢查用戶輸入正確的日期[如月應少於12 ....對於時間MM應小於60 ... 我們是否有任何內置函數在UNIX中爲檢查時間戳?檢查用戶在UNIX中輸入的日期和時間

+1

不回答你的問題,但是這總是我的錯誤:「日期爲MM/DD/YYYY 「:該格式僅在北美使用。考慮使用ISO-8601格式yyyy-mm-dd。 – Raedwald 2011-01-06 12:48:36

+0

LOL,讓混蛋進入UNIX時間,如果他們不知道,他們是不值得的用戶! – Anders 2011-01-06 12:56:17

回答

2

您可以使用unix 日期工具爲您解析並驗證它,然後測試返回碼例如

爲0的有效日期,返回代碼:

[email protected]:~$ date -d "12/12/2000 13:00" 
Tue Dec 12 13:00:00 GMT 2000 
[email protected]:~$ echo $? 
0 

了無效的日期,返回代碼1:

[email protected]:~$ date -d "13/12/2000 13:00" 
date: invalid date `13/12/2000 13:00' 
[email protected]:~$ echo $? 
1 

可以通過使用改變由日期接受的輸入格式+格式選項(man date

把它放在一起作爲一個小s CRIPT:

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 
0

你可以使用grep檢查輸入符合正確的格式:

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

其中PATTERN是匹配所有有效輸入,只有輸入有效定期expressino。我留給你建造這種模式;-)。

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