Linux下实现dat2iso命令:将DD.MM.YYYY日期转换为ISO 8601格式
Linux 下 dat2iso 命令完整实现方案
实现思路
直接编写独立的 bash 脚本即可,无需依赖额外工具,自带所有格式、合法性校验逻辑,完全匹配要求的错误提示规则。
完整脚本代码
#!/bin/bash # 检查输入参数数量 if [ $# -ne 1 ]; then echo "Error!" >&2 exit 1 fi input_date="$1" # 校验格式是否符合DD.MM.YYYY(自动过滤分隔符错误、位数错误场景) if [[ ! "$input_date" =~ ^[0-9]{2}\.[0-9]{2}\.[0-9]{4}$ ]]; then echo "Error!" >&2 exit 1 fi # 拆分日期字段 day=${input_date%%.*} remain=${input_date#*.} month=${remain%.*} year=${remain#*.} # 校验月份范围1-12 if [ "$month" -lt 1 ] || [ "$month" -gt 12 ]; then echo "Error!" >&2 exit 1 fi # 校验日期范围(自动适配不同月份天数、闰年2月特殊情况) max_day=$(cal "$month" "$year" | awk 'NF {d=$NF} END {print d}') if [ "$day" -lt 1 ] || [ "$day" -gt "$max_day" ]; then echo "Error!" >&2 exit 1 fi # 输出ISO 8601格式日期 echo "${year}${month}${day}"
部署方法
- 将上述代码保存为
/usr/local/bin/dat2iso文件 - 给文件添加执行权限:
chmod +x /usr/local/bin/dat2iso - 部署完成后全局都可以直接调用
dat2iso命令
效果验证
所有测试场景均可正确匹配:
- 正常转换:
dat2iso 30.09.2021输出20210930 - 正常转换:
dat2iso 01.01.2022输出20220101 - 分隔符错误:
dat2iso 03/10/2021输出Error! - 年份位数错误:
dat2iso 03.10.21输出Error! - 日期非法:
dat2iso 32.09.2021输出Error! - 月份非法:
dat2iso 30.13.2021输出Error!
内容的提问来源于stack exchange,提问作者Saeid Herawi
相关产品推荐
相关产品推荐

