日々ブログ

当サイトは、アフィリエイトプログラムにより商品をご紹介しています

【プログラミング】python datetimeのまとめ (タイムゾーンの置き換え)

datetime について何かとよく調べるので、私がよく使うものを定期的にまとめておきます。

モジュールの読み込み

私はこっち派

import datetime

datetime.datetime と書きたくない人は下のimport宣言文を利用
datetime.datetime 以外も使用する人は適宜インポートしてください。

from datetime import datetime

datetime オブジェクトを生成

文字列で頑張って加工することも可能ですが、datetimeオブジェクトに一旦置き換えた方が何かと便利です。

引数による作成
date_standard = datetime.datetime(year=2021,month=2,day=10,hour=7,minute=9,second=10,microsecond=100,tzinfo=None)
文字列から作成する

文字列にタイムゾーン情報が含まれていない場合はtzinfo=Noneとなる。
tz_infoを引数に取れたらどれだけ便利か。

str_date = '2021/1/1 12:00'
date_str = datetime.datetime.strptime(str_date,'%Y/%m/%d %H:%M')
str_date = '2021/1/1 12:00'

def str2date(str_date,timezone_info=None): # 即興で作った関数
    date_str = datetime.datetime.strptime(str_date,'%Y/%m/%d %H:%M')
    if timezone_info=='jst':
        timezone_JST = datetime.timezone(datetime.timedelta(hours=9))
        date_str = date_str.replace(tzinfo=timezone_JST)

    return date_str
UNIX時間から作成する
unix_timestampe = 0 ##ここがタイムスタンプ
date_unixtimestamp = datetime.datetime.fromtimestamp(unix_timestampe) # 1970-01-01 00:00:00
今の日付を作成する

タイムゾーンは常に意識しておいた方がトラブルを防げるので無難。
webアプリなら、サーバー側はutcでクライアント側はローカルタイム(JST)とか。

date_today = datetime.datetime.today() # タイムゾーンを指定できない。システムのローカル時刻に依存
date_now = datetime.datetime.now(tz=None) # タイムゾーンを指定できる
date_utc = datetime.datetime.utcnow() # utc タイムゾーンとして読み込む

タイムゾーンオブジェクトを作成する

タイムゾーンを操作する外部ライブラリを使用するよりは、datetimeで押し切った方が早い。
方法は、timedelataを使用してUTCからの時差を指定するだけで作成できます。
日本で使うタイムゾーンは軽く調べた限り下の3つがあった。
これだけあったタイムゾーンを1つにまとめた昔の人はすごい。

timezone_JST = datetime.timezone(datetime.timedelta(hours=9)) # 日本標準時
timezone_LMT_japan = datetime.timezone(datetime.timedelta(hours=9,minutes=18,seconds=48)) #日本の地方平均時
timezone_CJT = datetime.timezone(datetime.timedelta(hours=8)) # 日本にかつてあったタイムゾーン実質中国標準時

タイムゾーンを変更する

UTC時刻をJSTに置き換える

astimezoneとタイムゾーン情報を指定すれば勝手にしてくれる。

timezone_JST = datetime.timezone(datetime.timedelta(hours=9)) # JSTのタイムゾーン
date_utcnow = datetime.datetime.utcnow() # UTCの現在時刻
 date_utcnow.astimezone(timezone_JST) # 日本の時刻に変換 +9h
タイムゾーン情報だけを置き換える

datetimeのタイムゾーン情報が失われている場合やおかしい場合に使えそう。

timezone_JST = datetime.timezone(datetime.timedelta(hours=9)) # JSTのタイムゾーン
date_utcnow = datetime.datetime.utcnow() # UTCの現在時刻
date_jst=date_utcnow.replace(tzinfo=timezone_JST) # 時刻情報は+9hされない
時間情報の設定

時刻ではなく、時間を設定したい場合。
タイムゾーンの置き換えとか以外にも使える。

from datetime import timedelta
delta_time = timedelta(
days=1,
seconds=15,
microseconds=8,
minutes=1,
hours=2,
weeks=1
)