为何GNU date无法解析带+HH:MM时区的EXIF提取日期?
问题原因及解决办法
问题根源
GNU date 命令的输入解析规则和输出格式化规则是相互独立的:
- 虽然
%:z选项能生成带冒号的时区格式(如+03:00),但它解析输入时,默认不识别这种带冒号的时区偏移格式; - 同时,你从MOV文件提取的日期用冒号分隔年、月、日(
2024:05:31),这也不符合date默认支持的日期分隔方式——它只认横杠-或斜杠/分隔的格式(比如2024-05-31)。
这两个格式问题叠加,导致date无法识别你输入的时间字符串。
解决办法
先对提取到的日期字符串做格式转换,把日期部分的冒号换成横杠,时区部分的冒号去掉,再交给date解析:
# 假设creation_date是提取到的原始日期 creation_date="2024:05:31 20:57:23+03:00" # 格式转换:YYYY:MM:DD → YYYY-MM-DD;+03:00 → +0300 processed_date=$(echo "$creation_date" | sed -E 's/([0-9]{4}):([0-9]{2}):([0-9]{2})/\1-\2-\3/; s/([+-][0-9]{2}):([0-9]{2})/\1\2/') # 现在可以正常解析并格式化输出 date -d "$processed_date" "+%Y:%m:%d %H:%M:%S%:z"
执行后就能得到正确的解析结果,同时还能按你需要的格式输出。
内容的提问来源于stack exchange,提问作者Mirek
相关产品推荐
相关产品推荐

