大家好,
我想將 dat2iso 命令實作為腳本或別名,它接受德語格式 DD.MM.YYYY 的日期作為引數,并以 ISO 格式 YYYYMMDD 輸出日期作為輸出(在標準輸出上)。示例(作為別名或作為系統路徑中的腳本;
outputs:
$ dat2iso 30.09.2021
20210930
$ dat2iso 01.01.2022
20220101
$ dat2iso 03/10/2021
Error! <-- Because the separator was. required.
$ dat2iso 03.10.21
Error! <-- Because the year YYYY was prescribed with four digits.
$ dat2iso 32.09.2021
Error! <-- Denn einen 32. gibt es nicht.
$ dat2iso 30.13.2021
Error! <-- Because there is no 13th month.
我已經來更改格式,但我無法弄清楚其余部分,但我仍在努力:
echo 30.09.2021 | awk -F '.' {'printf "%s%s%s\n",$3,$2,$1'}
uj5u.com熱心網友回復:
這應該達到您的預期:
#!/bin/bash
dat2iso(){
if [[ $1 =~ ^([[:digit:]]{2})\.([[:digit:]]{2})\.([[:digit:]]{4})$ ]]; then
local date="${BASH_REMATCH[3]}${BASH_REMATCH[2]}${BASH_REMATCH[1]}"
if date -d "$date" >& /dev/null; then
echo "$date"
else
echo "Invalid date value [$date]" >&2
fi
else
echo "Invalid format of input [$1]. Correct format [DD.MM.YYYY]" >&2
fi
}
dat2iso 30.09.2021
uj5u.com熱心網友回復:
一個非常冗長的解決方案,但它會檢查您給定的豁免:
cat << EOF > dat2iso
#!/bin/bash
if [[ "\$1" == "" ]];then echo -e "NO INPUT. Exiting."; exit 1 ;fi
echo \$1 | awk -F '.' '/\//{ print "Input Error."; exit(1) }
\$1>31{ print "Too many days."; exit(1) }
\$2>12{ print "Too many months."; exit(1) }
\$3!~/[[:digit:]][[:digit:]][[:digit:]][[:digit:]]/{ print "Not enough year digits."; exit(1) }
{ print \$3\$2\$1 }'
EOF
chmod x dat2iso
$ ./dat2iso 09.12.2021
20211209
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/314552.html
