在Bash中如何将%y%m%d%H%M格式的日期转换为ISO标准格式
解决方法
date 命令默认无法直接识别 yyMMddHHmm 这种无分隔符的紧凑日期格式,所以需要先对输入字符串做格式处理,或者手动指定输入格式,不同系统的解决方案如下:
Linux 环境(GNU date)
可以通过字符串切片拆分版本号的各个时间部分,拼接为 date 可识别的格式后再做转换:
# 你的版本号变量 releaseVersion=2105231450 # 切片提取年、月、日、时、分后转换 formattedDate=$(date -d "20${releaseVersion:0:2}-${releaseVersion:2:2}-${releaseVersion:4:2} ${releaseVersion:6:2}:${releaseVersion:8:2}" +"%Y-%m-%d %H:%M") # 输出结果为 2021-05-23 14:50 echo $formattedDate
MacOS 环境(BSD date)
BSD 版本的 date 支持直接指定输入格式,使用 -f 参数声明输入的日期格式即可:
releaseVersion=2105231450 formattedDate=$(date -j -f "%y%m%d%H%M" "$releaseVersion" +"%Y-%m-%d %H:%M") echo $formattedDate
报错原因说明
你之前执行的命令存在两个问题:
- 没有为
date指定输入的10位数字串的格式,date无法识别该输入内容,所以抛出无效日期的错误 - 输出格式参数仍为
+%y%m%d%H%M,即便输入合法,输出结果也会是和输入一致的紧凑格式,无法得到你需要的ISO日期样式
内容的提问来源于stack exchange,提问作者soninob
相关产品推荐
相关产品推荐

