如何在Bash脚本中用jq将ISO 8601时间格式化为指定日期样式?
最简实现:将ISO 8601时间转换为指定日期格式
方法一:使用GNU date(Linux系统默认)
Linux自带的GNU date可直接解析ISO 8601格式字符串,无需额外处理:
- 先获取原始时间字符串(保留你的现有逻辑):
released_at=$(echo -E "${json_response}" | jq -r '.[0].released_at')
- 转换为目标格式:
formatted_date=$(date -d "${released_at}" +"%A, %B %d, %Y") echo "${formatted_date}"
- 格式参数说明:
%A:完整星期名称(如Wednesday)%B:完整月份名称(如September)%d:两位数字日期(如27)%Y:四位数字年份(如2023)
- 合并为单条命令(省略中间变量):
echo -E "${json_response}" | jq -r '.[0].released_at' | date -d - +"%A, %B %d, %Y"
方法二:使用BSD date(macOS系统默认)
macOS自带的BSD date需指定输入格式:
released_at=$(echo -E "${json_response}" | jq -r '.[0].released_at') formatted_date=$(date -jf "%Y-%m-%dT%H:%M:%S.%NZ" "${released_at}" +"%A, %B %d, %Y") echo "${formatted_date}"
-j:仅格式化输出,不修改系统时间-f:指定输入时间的匹配格式
跨平台简化:用jq内置函数(需jq 1.6+)
如果你的jq版本≥1.6,可直接在jq内部完成转换,无需调用外部date命令:
echo -E "${json_response}" | jq -r '.[0].released_at | strptime("%Y-%m-%dT%H:%M:%S.%LZ") | strftime("%A, %B %d, %Y")'
内容的提问来源于stack exchange,提问作者Anton Teterine
相关产品推荐
相关产品推荐

