カスタム書式日付を検証するための一般的なスクリプトを作成しています。これはスクリプトです。
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"
間違った日付が予想されます。出力は有効な日付です。
答え1
ここでは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
答え2
以下のスクリプトでテストしてみると、有効な日付と無効な日付がわかります。
#!/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