やりたいこと
2016-06-25 21:01:09.000 や 2016/06/25 21-01-09 といった自由な形式の時間の差分を取りたい時。
コード
"%Y-%m-%d %H:%M:%S.000"の箇所を自由な形式に変換することで、どのようなデータにも対応できる。
import datetime as dt # 時間 time1 = *2016-06-25 21:01:09.000* time2 = *2016-06-26 22:21:11.000* # datetimeに変換 new_time1 = dt.datetime.strptime(time1, "%Y-%m-%d %H:%M:%S.000") new_time2 = dt.datetime.strptime(time2, "%Y-%m-%d %H:%M:%S.000") # 計算が可能になる new_time1 - new_time2
大概はこのようなデータはcsvで大量に存在しているのでpandasのDataFrameにデータを格納して
def convert_time(t):return dt.datetime.strptime(time1, "%Y-%m-%d %H:%M:%S.000") df.apply(lambda x: convert_time(x['time_column']), axis=1)
などとして一括変換してしまう。ちなみに pd.to_datetimeも存在する。その場合は
data['checkin_time'] = pd.to_datetime(data['boarding_time'], format="%m-%d-%Y")
となる。
時間の加算
time + dt.timedelta(hours=1)
記号の説明
ここより一部抜粋させていただきました。
記号 | 説明 |
---|---|
%a | ロケールにおける省略形の曜日名。 |
%A | ロケールにおける省略なしの曜日名。 |
%b | ロケールにおける省略形の月名。 |
%B | ロケールにおける省略なしの月名。 |
%c | ロケールにおける適切な日付および時刻表現。 |
%d | 月の始めから何日目かを表す 10 進数 [01,31]。 |
%H | (24 時間計での) 時を表す 10 進数 [00,23]。 |
%I | (12 時間計での) 時を表す 10 進数 [01,12]。 |
%j | 年の初めから何日目かを表す 10 進数 [001,366]。 |
%m | 月を表す 10 進数 [01,12]。 |
%M | 分を表す 10 進数 [00,59]。 |
%p | ロケールにおける AM または PM に対応する文字列。 |
%S | 秒を表す 10 進数 [00,61]。 |
%U | 年の初めから何週目か (日曜を週の始まりとします)を表す 10 進数 [00,53]。年が明けてから最初の日曜日までの全ての 曜日は 0 週目に属すると見なされます。 |
%w | 曜日を表す 10 進数 [0(日曜日),6]。 |
%W | 年の初めから何週目か (日曜を週の始まりとします)を表す 10 進数 [00,53]。年が明けてから最初の月曜日までの全ての 曜日は 0 週目に属すると見なされます |
%% | 文字 "%" 自体の表現。 |