# -*- coding: utf-8 -*- """ RFC2822形式の日付をpythonのdatetimeに変換する関数 Sun, 05 Jun 2011 05:32:25 +0000 Wed, 08 Jun 2011 01:21:23 +0900 実行結果: 2011-06-08 01:21:23.824852 Wed, 08 Jun 2011 01:21:23 +0900 2011-06-08 01:21:23+09:00 Wed, 08 Jun 2011 01:21:23 +0900 参考: http://mitc.xrea.jp/diary/096 """ import datetime import email.utils def parse_date_string_to_datetime(date_string_rfc822): """ RFC2822形式の日付を解析して、 JST aware な datetime にする """ timetuple = email.utils.parsedate_tz(date_string_rfc822) d = datetime.datetime(*timetuple[:7]) #native d -= datetime.timedelta(seconds=timetuple[-1]) d = d.replace(tzinfo=UTC()).astimezone(JST()) return d #aware class UTC(datetime.tzinfo): def utcoffset(self, dt): return datetime.timedelta(0) def dst(self, dt): return datetime.timedelta(0) def tzname(self, dt): return "UTC" class JST(datetime.tzinfo): def utcoffset(self,dt): return datetime.timedelta(hours=9) def dst(self,dt): return datetime.timedelta(0) def tzname(self,dt): return "JST" def demo(): #test now = datetime.datetime.now() print(now) s = now.strftime("%a, %d %b %Y %H:%M:%S +0900") #nativeなので%zつかえない print s parsed = parse_date_string_to_datetime(s) print(parsed) print(parsed.strftime("%a, %d %b %Y %H:%M:%S %z")) #awareなので%zつかえる if __name__ == '__main__': demo()
コメント