🐧

よく使うPythonの時間関連処理まとめ

2022/01/06に公開

はじめに

こんにちは、クラスメソッド AWS事業本部の筧です。

前回は Zendesk の CSAT(カスタマー満足度)を Zenpy で取得方法についてご紹介しました。
その際、時間関連の処理を行う箇所を割愛したので、今回はそちらをピックアップしてご紹介します。
https://zenn.dev/t_kakei/articles/514d6bf8ea89cb

まとめてみた

datetime 型の utc 時刻をベースに色々な処理をまとめてみました。

import datetime

from dateutil import tz

"""timezone取得(UTC,JST)"""
utc = tz.gettz("UTC")
jst = tz.gettz('Asia/Tokyo')

"""現在時刻をdatetime型で取得(UTC)"""
now_utc = datetime.datetime.now(utc)
print(now_utc)
# 2022-01-06 07:58:36.843373+00:00
print(now_utc.isoformat())
# 2022-01-06T07:58:36.843373+00:00
print(now_utc.strftime("%d/%m/%y-%H%M%S%f"))
# 06/01/22-075836843373

"""置き換え(UTC)"""
r = now_utc.replace(hour=0, minute=0, second=0, microsecond=0)
print(r)
# 2022-01-06 00:00:00+00:00

"""加算減算(UTC)"""
d = datetime.timedelta(weeks=1)
print(now_utc - d)
# 2021-12-30 07:58:36.843373+00:00
d = datetime.timedelta(days=1)
print(now_utc - d)
# 2022-01-05 07:58:36.843373+00:00

"""UTCからJSTに変換"""

now_jst = now_utc.astimezone(jst)
print(now_jst)
# 2022-01-06 16:58:36.843373+09:00

"""datetimeからunixに変更(UTC)"""
now_unix = now_utc.timestamp()
print(now_unix)
# 1641455916.843373

ZenedskのCSAT(カスタマー満足度)を週次集計してSlackに通知するサービス[1]では以下のような関数で利用しています。

使用例
import datetime
from typing import Dict

from dateutil import tz


def calc_aggregation_period(self, ago: int) -> Dict:
    utc = tz.gettz("UTC")
    jst = tz.gettz("Asia/Tokyo")

    dt_utc = datetime.datetime.now(utc)
    dt_utc_end_time = dt_utc.replace(hour=0, minute=0, second=0, microsecond=0)
    dt_utc_start_end_time = dt_utc_end_time - datetime.timedelta(days=int(ago))
    unix_utc_end_time = dt_utc_end_time.timestamp()
    unix_utc_start_time = dt_utc_start_end_time.timestamp()

    dt_jst = dt_utc.astimezone(jst)
    dt_jst_end_time = dt_jst.replace(hour=0, minute=0, second=0, microsecond=0)
    dt_jst_start_time = dt_jst_end_time - datetime.timedelta(days=int(ago))

    return {
        "unix_utc_start_time": unix_utc_start_time,
        "unix_utc_end_time": unix_utc_end_time,
        "dt_jst_start_time": dt_jst_start_time,
        "dt_jst_end_time": dt_jst_end_time,
    }

あとがき

自分がよく使う処理はこうしてまとめておくと便利ですよね。
今後、自分用のスニペットもちょくちょく公開していこうと思います。

それではまた!

参考

脚注
  1. DevelopersIO の私のブログに後日公開予定 ↩︎

Discussion