如何使用Jinja将JSON时间戳转换为指定格式时间?
问题
我有如下简单JSON:
{ "ts": "2022-07-17T09:24:21.840227" }
我希望使用Jinja将其转换为可读的日期时间格式。尝试了以下两种写法,但均未得到预期结果:
{{ ts | iso8601_to_time | datetimeformat('%a, %B %d %Y, %H:%M:%S') }}{{ ts | timestamp_to_time | datetimeformat('%a, %B %d %Y, %H:%M:%S') }}
期望得到的格式:
Sun, July 17 2022, 09:24:17
解答
Jinja核心库本身没有iso8601_to_time或timestamp_to_time这类过滤器,也不存在datetimeformat过滤器,你需要用标准的Jinja过滤器组合来实现:
方法1:使用to_datetime + strftime(适用于Jinja 2.11+或Ansible等集成环境)
先通过to_datetime把ISO格式的字符串转换成datetime对象,再用strftime按照指定格式输出:
{{ ts | to_datetime | strftime('%a, %B %d %Y, %H:%M:%S') }}
方法2:手动调用Python的datetime方法(通用场景)
如果你的环境中没有to_datetime过滤器,可以直接借助Python的datetime.fromisoformat方法来转换:
{{ ts | datetimefromisoformat | strftime('%a, %B %d %Y, %H:%M:%S') }}
注意事项
- 如果时间字符串包含时区信息,转换时需保留时区,避免出现时间偏移问题;
strftime的格式化符号和Python标准一致,可根据需求调整格式参数。
内容的提问来源于stack exchange,提问作者Pan Veduci
相关产品推荐
相关产品推荐

