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

Ansible中转换ISO 8601时间为epoch报错,求解决方法

问题解决:Ansible中带时区微秒时间转Epoch时间

错误原因

你使用的strftime('%s')无法处理to_datetime返回的带时区(aware)的datetime对象,Python的datetime.strftime对%s格式符的支持依赖系统环境,且针对带时区的时间对象会抛出无效值错误。

可行解决方案

方案1:使用timestamp()方法(推荐)

Python 3.3+的datetime对象(包括带时区的)支持timestamp()方法,直接返回从Epoch开始的秒数(含微秒小数),如果需要整数秒可再转成int:

# 保留微秒的Epoch时间(浮点型)
{{ ('2024-02-26T15:47:06.403633+00:00'| to_datetime(format='%Y-%m-%dT%H:%M:%S.%f%z')).timestamp() }}

# 转成整数秒
{{ ('2024-02-26T15:47:06.403633+00:00'| to_datetime(format='%Y-%m-%dT%H:%M:%S.%f%z')).timestamp() | int }}

方案2:兼容旧版Python/Ansible

如果你的环境Python版本低于3.3,timestamp()不支持带时区的datetime对象,可以手动计算时间差:

{% set target_dt = '2024-02-26T15:47:06.403633+00:00'| to_datetime(format='%Y-%m-%dT%H:%M:%S.%f%z') %}
{% set epoch_dt = target_dt.fromtimestamp(0, target_dt.tzinfo) %}
{{ (target_dt - epoch_dt).total_seconds() | int }}

验证结果

执行上述代码后,会得到对应时间的Epoch值:1708962426(整数秒)或1708962426.403633(含微秒)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:02:37