#author("2019-05-14T09:57:59+09:00","default:Miyashita","Miyashita") #author("2019-05-14T09:58:42+09:00","default:Miyashita","Miyashita") *日付・時刻データの扱い [#ia0df79e] **はじめに [#l3c4e695] datetime の中に datetime があるため, #codeprettify{{ import datetime # ① from datetime import datetime # ② }} の2種類のインポートが見られる.ちょっと紛らわしい.~ timedelta は datetime.timedelta なので気をつけたい. ここでは①のインポートを前提とする. また,1900年1月1日以前の時刻を扱う際はややこしいので注意する.~ datetime 型の変数は matplotlib 等でもそのまま使用できる. ~ ~ ***文字列→datetime 型 [#re687d34] テキストファイルから読み込んだ文字列群を,python 上で処理できるように変換する際に使用する.~ format を指定するときは strptime,勝手に判別してほしいときは dateutil.parser.parse を使う.~ #codeprettify{{ t = datetime.datetime.strptime(str_time, '%y/%m/%d %H:%M:%S') # formatは一例 }} #codeprettify{{ from dateutil.parser import parse t = parse(str_time) }} リスト型の str_time の桁が不揃いでややこしい場合に parse が役立つ.~ #codeprettify{{ dtime = [parse(k) for k in str_time] }} ~ ~ ***datetime 型→文字列 [#f84f7cac] ファイル名や図のタイトル,ラベルとして表示する際に使用する. dtime という datetime 型の変数であれば, #codeprettify{{ str_date = dtime.strftime('%y/%m/%d') # formatは一例 }} で通常は変換できる.ただし,1900年1月1日より前の日付時刻だとエラーになってしまうため工夫が必要.~ 文字列として表示させる時だけ strftime の年を適当な値(≧1900)で埋める. #codeprettify{{ tmp = datetime.datetime(1900, dtime.month, dtime.day) # 年はどの値でもOK(2月29日以外) str_date = str(dtime.year) + "/" + tmp.strftime("%m/%d") }} ~ ***datetime.datetime [#g8c4ccfa] 日付・時刻をそれぞれ直接入力することで datetime.datetime オブジェクトを生成する.年月日は必須(引数は最低3つ).時以降はオプション. #codeprettify{{ dtime = datetime.datetime(year, month, day, hour, minute, second, microsec) }} ~ ~ ***datetime.timedelta [#cff2e715] 日付・時刻のデータは,全てを生の時刻で保持している場合と,ある基準時刻を軸にそこからの差分をリストとしてデータに格納している場合がある.~ timedeltaは後者の場合に頻繁に使う.~ 日数を表す数値配列 num_days の,最初の要素との差分を取得するには #codeprettify{{ import numpy as np delta_days = [datetime.timedelta(days=num_days[k]-num_days[0]) for k in np.arange(0,len(num_days))] }} datetime 型のリスト dtime という変数からある基準時刻(yyyy年mm月dd日)との差を取得するには #codeprettify{{ delta_time = [dtime[k] - datetime.datetime(yyyy,mm,dd) for k in np.arange(0,len(dtime))] }} ~ ~ ** numpy.datetime64 [#dc78082b] これまでの datetime とは別に,numpy.datetime64 もある.~