<p>如果是本地时区,并且给定时间的时区规则与现在相同,则可以使用仅限stdlib的解决方案(某些边缘情况除外):</p>
<pre><code>#!/usr/bin/env python
from email.utils import parsedate_tz, mktime_tz
from datetime import datetime
timestamp = mktime_tz(parsedate_tz("Tue, 12 Jun 2012 14:03:10 GMT"))
print(datetime.fromtimestamp(timestamp))
# -> 2012-06-12 10:03:10
</code></pre>
<p>否则,您需要来自历史时区数据库的数据来获得正确的utc偏移量。<a href="http://pytz.sourceforge.net/" rel="nofollow noreferrer">^{<cd1>} module</a>提供对<a href="https://www.iana.org/time-zones/repository/tz-link.html" rel="nofollow noreferrer">the tz database</a>的访问:</p>
<pre><code>#!/usr/bin/env python
from email.utils import parsedate_tz, mktime_tz
from datetime import datetime
import pytz # $ pip install pytz
timestamp = mktime_tz(parsedate_tz("Tue, 12 Jun 2012 14:03:10 GMT"))
eastern_dt = datetime.fromtimestamp(timestamp, pytz.timezone('America/New_York'))
print(eastern_dt.strftime('%a, %d %b %Y %H:%M:%S %z (%Z)'))
# -> Tue, 12 Jun 2012 10:03:10 -0400 (EDT)
</code></pre>
<p>注意:POSIX <code>timestamp</code>在世界各地都是一样的,也就是说,如果你想找到时间戳,你的本地时区并不重要(除非你的时区是“正确的”类型)。这里是如何<a href="https://stackoverflow.com/a/8778548/4279">convert a utc time to the timestamp</a>。</p>