シェルからカスタム形式で日付を検証する

シェルからカスタム形式で日付を検証する

カスタム書式日付を検証するための一般的なスクリプトを作成しています。これはスクリプトです。

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

おすすめ記事