You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash脚本中用jq将ISO 8601时间格式化为指定日期样式?

最简实现:将ISO 8601时间转换为指定日期格式

方法一:使用GNU date(Linux系统默认)

Linux自带的GNU date可直接解析ISO 8601格式字符串,无需额外处理:

  1. 先获取原始时间字符串(保留你的现有逻辑):
released_at=$(echo -E "${json_response}" | jq -r '.[0].released_at')
  1. 转换为目标格式:
formatted_date=$(date -d "${released_at}" +"%A, %B %d, %Y")
echo "${formatted_date}"
  • 格式参数说明:
    • %A:完整星期名称(如Wednesday)
    • %B:完整月份名称(如September)
    • %d:两位数字日期(如27)
    • %Y:四位数字年份(如2023)
  1. 合并为单条命令(省略中间变量):
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 23:07:36