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_timestampe = 0
date_unixtimestamp = datetime.datetime.fromtimestamp(unix_timestampe)
今の日付を作成する
タイムゾーンは常に意識しておいた方がトラブルを防げるので無難。
webアプリなら、サーバー側はutcでクライアント側はローカルタイム(JST)とか。
date_today = datetime.datetime.today()
date_now = datetime.datetime.now(tz=None)
date_utc = datetime.datetime.utcnow()
タイムゾーンを操作する外部ライブラリを使用するよりは、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))
astimezoneとタイムゾーン情報を指定すれば勝手にしてくれる。
timezone_JST = datetime.timezone(datetime.timedelta(hours=9))
date_utcnow = datetime.datetime.utcnow()
date_utcnow.astimezone(timezone_JST)
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
)