日付・時刻データの扱い

datetimeの中にdatetimeオブジェクトがあるため,

import datetime # ①
from datetime import datetime # ②

の2種類のインポートが見られる.ちょっと紛らわしい.
timedeltaはdatetime.timedeltaなので気をつけたい. ここでは①のインポートを前提とする. また,1900年1月1日以前の時刻を扱う際はややこしいので注意する.
datetime型の変数はmatplotlib等でもそのまま使用できる.

文字列→datetime型

テキストファイルから読み込んだ文字列群を,python上で処理できるように変換する際に使用する.
formatを指定するときはstrptime,勝手に判別してほしいときはdateutil.parser.parseを使う.

t = datetime.datetime.strptime(str_time, '%y/%m/%d %H:%M:%S') # formatは一例
from dateutil.parser import parse
t = parse(str_time)

リスト型のstr_timeの桁が不揃いでややこしい場合にparseが役立つ.
datetime型はnumpy配列のように扱えないのがMATLAB慣れしていると若干面倒に思える.

dtime = [parse(k) for k in str_time]

datetime型→文字列

ファイル名や図のタイトル,ラベルとして表示する際に使用する. dtimeというdatetime型の変数であれば,

str_date = dtime.strftime('%y/%m/%d') # formatは一例

で通常は変換できる.ただし,1900年1月1日より前の日付時刻だとエラーになってしまうため工夫が必要.
文字列として表示させる時だけstrftimeの年を適当な値(≧1900)で埋める.

tmp = datetime.datetime(1900, dtime.month, dtime.day) # 年はどの値でもOK(2月29日以外)
str_date = str(dtime.year) + "/" + tmp.strftime("%m/%d")

datetime.datetime

日付・時刻をそれぞれ直接入力することでdatetime.datetimeオブジェクトを生成する.年月日は必須(引数は最低3つ).時以降はオプション.

dtime = datetime.datetime(year, month, day, hour, minute, second, microsec)

datetime.timedelta

日付・時刻のデータは,全てを生の時刻で保持している場合と,ある基準時刻を軸にそこからの差分をリストとしてデータに格納している場合がある.
timedeltaは後者の場合に頻繁に使う.
日数を表す数値配列num_daysの,最初の要素との差分を取得するには

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日)との差を取得するには

delta_time = [dtime[k] - datetime.datetime(yyyy,mm,dd) for k in np.arange(0,len(dtime))]

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2018-01-09 (Tue) 08:07:46 (161d)