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

Ansible中如何将yyyymmdd时间戳转换为yyyy-mm-dd可读日期格式

需求说明

现有变量 "{{ outdated_certs.0.not_after[0:8] }}",输出值为yyyymmdd格式的纯数字日期,示例值为20220426,需要将其重格式化为yyyy-mm-dd的易读格式,对应示例目标输出为2022-04-26。

已验证的无效方案
  • 调用to_datetime过滤器,写法为" {{outdated_certs.0.not_after[0:8]| to_datetime }}",触发报错:

"time data '20220426' does not match format '%Y-%m-%d %H:%M:%S'"

  • 调用strftime过滤器,写法为"{{ '%Y-%m-%d' | strftime(outdated_certs.0.not_after[0:8]) }}",输出错误日期1970-08-22。经排查,该过滤器默认处理纪元时间(epoch time)格式的输入,不符合当前字符串日期转换需求。
可行方案

方案1:日期解析转换(推荐生产环境使用)

to_datetime过滤器支持手动指定原始日期的匹配格式,解析为标准时间对象后再格式化输出即可,写法如下:

{{ outdated_certs.0.not_after[0:8] | to_datetime('%Y%m%d') | strftime('%Y-%m-%d') }}

该方案会自动校验日期合法性,遇到无效日期值会直接抛出报错,不会生成异常拼接结果。

方案2:字符串切片拼接(适合数据源格式完全可信场景)

如果能保证原始值永远是严格8位的yyyymmdd格式,可直接通过字符串切片拼接得到目标格式,无需走日期解析逻辑,写法更简洁:

{{ outdated_certs.0.not_after[0:4] }}-{{ outdated_certs.0.not_after[4:6] }}-{{ outdated_certs.0.not_after[6:8] }}

注意:该方案不会校验日期合法性,若原始值存在非日期的异常内容,会直接输出拼接后的错误字符串。

内容的提问来源于stack exchange,提问作者d1530

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 06:18:21