Linux

shell中自定義格式的日期驗證

  • May 11, 2021

我正在為自定義格式日期驗證編寫一個通用腳本。這是腳本

dateformat=$1
d=$2
date "+$dateformat" -d "$d" > /dev/null  2>&1
if [ $? != 0 ]
then
   echo "Date $d NOT a valid YYYY-MM-DD date"
   exit 1
fi

問題是

  • sh -x poc_col_val_date.sh "%Y-%m-%d" "2019-11-09" 預期是有效日期,輸出也正確
  • sh -x poc_col_val_date.sh "%d-%m-%Y" "2019-11-09" 預期是無效日期,輸出是有效日期

我使用以下腳本進行了測試,您將了解有效和無效日期

#!/bin/bash
d="2021-03-20"
z="20-03-2021"
date +%Y-%m-%d -d "$d"
if [ $? -eq 0 ]
then
echo "its valid date"
fi
echo "========================="

date +%d-%m-%Y -d "$d"
if [ $? -eq 0 ]
then
echo "its valid date"
fi

echo "========================"

date +%Y-%m-%d -d "$z"
if [ $? -ne 0 ]
then
echo "its not a valid date"
fi




output

2021-03-20
its valid date
=========================
20-03-2021
its valid date
========================
date: invalid date ‘20-03-2021’
its not a valid date

你可以在這裡使用 perl。這使用 Time::Piece 這是一個核心模組。

valid_date() {
 # this function returns with the exit status of the perl command
 perl -MTime::Piece -se 'Time::Piece->strptime($date, $fmt)' -- -fmt="$1" -date="$2" 2>/dev/null
}

所以

valid_date '%Y-%m-%d' '2019-11-09' && echo Y || echo N     # => Y
valid_date '%d/%m/%y' '2019-11-09' && echo Y || echo N     # => N

引用自:https://unix.stackexchange.com/questions/649230