2016-01-22 34 views
1

我有这样的读出Tue, 19 Jan 2016 16:12:18 -0800 (PST)转换的Gmail时间戳strptime

我存储在蒙戈电子邮件和我想这个转换成一个Python时间对象,所以我可以基于电子邮件的时间查询蒙戈。

这样做的最好方法是什么?

谢谢!

回答

0

一种方法是使用datetime模块的strptime功能,

import datetime 
timestamp = "Tue, 19 Jan 2016 16:12:18 -0800 (PST)" 
dt = datetime.datetime.strptime(timestamp, "%a, %d %b %Y %H:%M:%S %z (%Z)") 

Python's datetime module读了为找到指导这些格式字符串如何工作,以便您可以建立自己的!

+0

太棒了。我正在查看文档 - 我发现%z是UTC forfeset,但即时获取错误“ValueError:'z'是格式为'%a,%d%b%Y%H: %M:%S%z(%Z)''。任何想法为什么? –

+0

你使用Python <3.2吗?根据[这](https://bugs.python.org/issue6641)错误报告和[this](https://stackoverflow.com/questions/2609259/converting-string-to-datetime-object-in-python )堆栈溢出后,似乎在3.2之前的Python中,这是在系统级别上实现的,所以如果你的系统不支持C中的那个指令,它可能不起作用。 –

+0

我使用的是2.7.8版本...因此可以解释它 –

2

python-dateutil会让事情变得简单:

>>> from dateutil.parser import parse 
>>> parse("Tue, 19 Jan 2016 16:12:18 -0800 (PST)") 
datetime.datetime(2016, 1, 19, 16, 12, 18, tzinfo=tzoffset(u'PST', -28800)) 
+0

我做'须藤PIP安装python-dateutil'但我仍然得到'ImportError:没有名为dateutil.parser的模块' –

+0

@MorganAllen确保你将它安装到正确的环境中。你在使用虚拟环境吗? – alecxe

+0

我很新的工程,所以不是我所知道的?我通常只是打开终端...如何检查我是否在虚拟环境中? –

0

为了解析从电子邮件中的字符串,你可以使用email包从STDLIB:

>>> from email.utils import parsedate_tz, mktime_tz 
>>> timestamp = mktime_tz(parsedate_tz('Tue, 19 Jan 2016 16:12:18 -0800 (PST)')) 

其中timestamp"seconds since the Epoch"。要获得UTC时间,这可以通到MongoDB的:

>>> from datetime import datetime, timedelta 
>>> utc_time = datetime(1970, 1, 1) + timedelta(seconds=timestamp) 
>>> utc_time 
datetime.datetime(2016, 1, 20, 0, 12, 18) 

也见Python: parsing date with timezone from an email

0

的Python 3.2+

from datetime import datetime 
datetime.strptime("Tue, 19 Jan 2016 16:12:18 -0800 (PST)"[:31], 
        '%a, %d %b %Y %H:%M:%S %z')