ISO 格式 YYYYMMDD Alias/Script Linux
ISO-Format JJJJMMTT Alias/Script Linux
大家好,
我想将 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",,,'}
这应该达到您的预期:
#!/bin/bash
dat2iso(){
if [[ =~ ^([[: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 []. Correct format [DD.MM.YYYY]" >&2
fi
}
dat2iso 30.09.2021
一个非常冗长的解决方案,但它会检查您给定的豁免:
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
大家好,
我想将 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",,,'}
这应该达到您的预期:
#!/bin/bash
dat2iso(){
if [[ =~ ^([[: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 []. Correct format [DD.MM.YYYY]" >&2
fi
}
dat2iso 30.09.2021
一个非常冗长的解决方案,但它会检查您给定的豁免:
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