RFC2822形式の日付をpythonのdatetimeに変換する
Python
2011-06-07 16:23 (15 years ago)

# -*- 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()
評価をお願いします (会員登録・ログイン不要)
現在の評価: 5.0 (1)
著者は、アプリケーション開発会社 Cyberneura を運営しています。
開発相談をお待ちしています。
開発相談をお待ちしています。