Jan, Feb, ...などを含むタイムスタンプの処理
データを時系列順にソートするコードを書く際、月の英名を含むタイムスタンプの処理に手間取ったのでメモ。
時刻の比較を行うために、タイムスタンプをdatetimeオブジェクトへ変換したいが、Jan,Febといった英名を含むタイムスタンプは、そのままでは変換できない。
そこで、calendarモジュールで英名と月の対応をさせる。
test.py
import datetime
import calendar
timestamp = "Dec 3 14:55:51"
words = timestamp.split(" ")
months = {}
for i ,v in enumerate(calendar.month_abbr):
months[v] = i
time_string = "2015-" + str(months[words[0]]) + "-" + str(words[1]) + " " + words[2]
time_datetime = datetime.datetime.strptime(time_string, '%Y-%m-%d %H:%M:%S')
これで無事、datetimeオブジェクトが生成される。
決め打ち感が凄いので汎用性はないですが、メモということで。
追記
コメントでご指摘をいただきましたが、datetimeのドキュメントに月の英名からの変換が載っているそうです。見落としておりました。
8.1.7. strftime() と strptime() の振る舞い
また、年号の決め打ちに関してもpython-dateutilを用いれば適宜解決してくれるとの情報も頂戴しました。ありがとうございます。
参考
Pythonで文字列 <-> 日付(date, datetime) の変換
Python 英語の省略形月名(Jan, Feb, Mar, Apr …)の場所