てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] UNIX タイムスタンプを任意の日付時刻フォーマットに変換する strftime

はじめに

1609948923 のような UNIX タイムスタンプを、2021/01/07 01:02:03 のようなフォーマットに変換する方法です。

これをやりたい機会があって調べてたのですが、思いの外目当ての情報ににたどり着けず・・。 結局ちゃんと公式ドキュメントに書いてありました。公式ドキュメントへの橋渡しを兼ねて記事にします。

  • 環境
    • Ansible 2.9.14
    • Jinja2 2.11.2

Playbook

strftime を利用します。

---
- hosts: localhost
  gather_facts: false

  tasks:
    - name: debug datetime format
      debug:
        msg: "{{ '%Y/%m/%d %H:%M:%S' | strftime(1609948923) }}"

利用できるフォーマットは、以下の Python のドキュメントに掲載されています。

time — Time access and conversions — Python 3.9.1 documentation

実行

Playbook を実行します。

$ ansible-playbook -i localhost, ts.yml

PLAY [localhost] **************************************************************************************************

TASK [debug datetime format] **************************************************************************************
ok: [localhost] => {
    "msg": "2021/01/07 01:02:03"
}

PLAY RECAP ********************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

"2021/01/07 01:02:03" と表示されました。

参考

公式ドキュメントはこちら。

docs.ansible.com

以下のサンプルが掲載されています。

# Use arbitrary epoch value
{{ '%Y-%m-%d' | strftime(0) }}          # => 1970-01-01
{{ '%Y-%m-%d' | strftime(1441357287) }} # => 2015-09-04