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 )