Mon Jul 09 09:20:28 +0000 2012
そのような形式をSTRINGとして使用している場合、どうすればUNIXタイムスタンプに変換できますか?
注:この形式はTwitterのAPIから取得しています。
Mon Jul 09 09:20:28 +0000 2012
そのような形式をSTRINGとして使用している場合、どうすればUNIXタイムスタンプに変換できますか?
注:この形式はTwitterのAPIから取得しています。
最適なオプションは、適切なタイムゾーン情報dateutil.parser.parse()
を持つオブジェクトを提供する を使用することです:datetime
>>> import dateutil.parser
>>> dt = dateutil.parser.parse('Mon Jul 09 09:20:28 +0200 2012')
>>> dt
datetime.datetime(2012, 7, 9, 9, 20, 28, tzinfo=tzoffset(None, 7200))
これを UNIX タイムスタンプに変換する必要があります。
>>> import time
>>> int(time.mktime(dt.timetuple()))
1341822028
あなたが持っているフォーマットは、次を使用して簡単に解析することもできますemail.utils.parsedate_tz
:
>>> import datetime
>>> import email.utils
>>> parts = email.utils.parsedate_tz('Mon Jul 09 09:20:28 +0200 2012')
>>> dt = datetime.datetime(*parts[:6]) - datetime.timedelta(seconds=parts[-1])
>>> str(dt)
'2012-07-09 07:20:28'
これは実際email.utils.parsedate_to_datetime
に Python 3.3 で実装されている方法です (これをコピーしてプロジェクトに貼り付けたい場合は__parsedate_tz
、parsedate_tz
fromに置き換えますemail.utils
):
def parsedate_to_datetime(data):
if not data:
return None
*dtuple, tz = __parsedate_tz(data)
if tz is None:
return datetime.datetime(*dtuple[:6])
return datetime.datetime(*dtuple[:6],
tzinfo=datetime.timezone(datetime.timedelta(seconds=tz)))
タイムゾーンが常に +0000 であることがわかっている場合は、次を使用できます。
time.strptime('Mon Jul 09 09:20:28 +0000 2012', '%a %b %d %H:%M:%S +0000 %Y')
これは日時構造を返します。エポック以降の unix 秒が必要な場合は、次のように time.mktime() を実行します。
>>> time.mktime(time.strptime('Mon Jul 09 09:20:28 +0000 2012', '%a %b %d %H:%M:%S +0000 %Y'))
1341818428.0
または実際にタイムゾーンが常に UTC の場合は time.gmtime() 。
datetime.strptime()