ユーザーが入力した日付(mmddyyyy)を確認しようとしています。以下を使用しましたが、動作しません。間違いを修正してください。
date "+%m%d%Y" -d "02012019" > /dev/null 2>&1
echo $?
ベストアンサー1
そしてzsh
:
#! /bin/zsh -
date=${1?No date specified}
zmodload zsh/datetime || exit
if
strftime -rs t %m%d%Y "$date" 2> /dev/null &&
strftime -s canonical_date_for_t %m%d%Y "$t" 2> /dev/null &&
[[ $date = $canonical_date_for_t ]]
then
print -r -- $date is valid
else
print -ru2 -- ${(q+)date} is invalid
exit 1
fi
strftime -r
解析された入力に基づいて呼び出されますstrptime()
。フォーマットされた日付に戻る変換を使用せずに。$date
%m%d%Y
strftime
-r
%m%d%Y
strftime()
strptime()
aを受け入れて02292019
として処理します03012019
が、一度キャストすると拒否されstrftime()
ます03012019
。同様に12310001
、(0001-12-31)は期待どおりに拒否されます12311
(%Y
1年目のACではなく1
;0001
必要%Y
に応じて次に置き換えます)。%4Y
strftime
0001
予想される年表示1
)。