🐧
よく使うPythonの時間関連処理まとめ
はじめに
こんにちは、クラスメソッド AWS事業本部の筧です。
前回は Zendesk の CSAT(カスタマー満足度)を Zenpy で取得方法についてご紹介しました。
その際、時間関連の処理を行う箇所を割愛したので、今回はそちらをピックアップしてご紹介します。
まとめてみた
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,
}
あとがき
自分がよく使う処理はこうしてまとめておくと便利ですよね。
今後、自分用のスニペットもちょくちょく公開していこうと思います。
それではまた!
参考
- https://atmarkit.itmedia.co.jp/ait/articles/2111/02/news019.html
- https://www.javadrive.jp/python/date/index7.html
- https://python.civic-apps.com/datetime-utc-jst-convert/
-
DevelopersIO の私のブログに後日公開予定 ↩︎
Discussion