Ansible:比较过去一小时两个日期之间的差异

dsa*_*don 5 time date amazon-ec2 jinja2 ansible

有一种方法之间比较当前时间使用ansible_date_time 与另一日期(AWS EC2推出的时间),所以我就能知道它是否在最后一小时发生了什么?

我有以下变量 ec2_launch_time: 2018-01-04T15:57:52+00:00

我知道我可以用以下方法比较天数(从这里这里):

"{{ (ansible_date_time.iso8601[:19] | to_datetime('%Y-%m-%dT%H:%M:%S') - ec2_launch_time[:19] | to_datetime('%Y-%m-%dT%H:%M:%S')).days }}"
Run Code Online (Sandbox Code Playgroud)

如果我会得到0,我会知道它发生在同一天,但如果日期之间的差异为1 小时(同一天),我正在寻找一种方法来判断真假。

有一个过滤器可以用于这种或优雅的方式来编写这个或只使用外壳(像这样)?

tec*_*raf 7

通过减去两个日期,你得到一个timedeltaPython 对象

您可以使用total_secondsmethod以秒为单位获得确切的差异。添加一些基本算术以获得完整的小时数:

---
- hosts: localhost
  gather_facts: no
  connection: local
  vars:
    date_later: 2018-01-05 08:30:00
    date_earlier: 2018-01-05 06:50:00
  tasks:
    - debug:
        msg: "{{ ( (date_later - date_earlier).total_seconds() / 3600 ) | int }}"
Run Code Online (Sandbox Code Playgroud)

返回:

ok: [localhost] => {
    "msg": "1"
}
Run Code Online (Sandbox Code Playgroud)

在您想要的条件下使用上述表达式。

  • 谢谢@techraf,这对我有用`(ansible_date_time.iso8601[:19] | to_datetime('%Y-%m-%dT%H:%M:%S') - ec2_launch_time[:19] | to_datetime('% Y-%m-%dT%H:%M:%S')).total_seconds() / 3600 | int <= 1` (2认同)