日付・時刻データの扱い

はじめに

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 が役立つ.

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))]



numpy.datetime64

これまでの datetime とは別に,numpy.datetime64 もある.


Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2019-05-14 (Tue) 00:58:42 (1977d)