如何使用python将GMT时间转换为EST时间

如何使用python将GMT时间转换为EST时间,python,timezone,timestamp,Python,Timezone,Timestamp,我想把GMT时间转换成EST时间,并得到一个时间戳。我尝试了以下方法,但不知道如何设置时区 time = "Tue, 12 Jun 2012 14:03:10 GMT" timestamp2 = time.mktime(time.strptime(time, '%a, %d %b %Y %H:%M:%S GMT')) 时区没有内置到标准Python中-您需要使用另一个库。这是个不错的选择 >>> gmt = pytz.timezone('GMT') >>>

我想把GMT时间转换成EST时间,并得到一个时间戳。我尝试了以下方法,但不知道如何设置时区

time = "Tue, 12 Jun 2012 14:03:10 GMT"
timestamp2 = time.mktime(time.strptime(time, '%a, %d %b %Y %H:%M:%S GMT'))

时区没有内置到标准Python中-您需要使用另一个库。这是个不错的选择

>>> gmt = pytz.timezone('GMT')
>>> eastern = pytz.timezone('US/Eastern')
>>> time = "Tue, 12 Jun 2012 14:03:10 GMT"
>>> date = datetime.datetime.strptime(time, '%a, %d %b %Y %H:%M:%S GMT')
>>> date
datetime.datetime(2012, 6, 12, 14, 3, 10)
>>> dategmt = gmt.localize(date)
>>> dategmt
datetime.datetime(2012, 6, 12, 14, 3, 10, tzinfo=<StaticTzInfo 'GMT'>)
>>> dateeastern = dategmt.astimezone(eastern)
>>> dateeastern
datetime.datetime(2012, 6, 12, 10, 3, 10, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>)
gmt=pytz.timezone('gmt')) >>>东部=pytz.时区(“美国/东部”) >>>time=“2012年6月12日星期二14:03:10 GMT” >>>date=datetime.datetime.StrTime(时间,“%a,%d%b%Y%H:%M:%S GMT”) >>>日期 datetime.datetime(2012,6,12,14,3,10) >>>dategmt=gmt.localize(日期) >>>dategmt datetime.datetime(2012,6,12,14,3,10,tzinfo=) >>>dateeastern=dategmt.astimezone(东部) >>>日东 datetime.datetime(2012,6,12,10,3,10,tzinfo=) 使用


如果是您的本地时区,并且给定时间的时区规则与现在相同,则您可以使用stdlib-only解决方案(某些边缘情况除外):

否则,您需要来自历史时区数据库的数据才能获得正确的utc偏移量。提供访问:


注意:POSIX
timestamp
在世界各地都是一样的,即如果您想找到时间戳,您的本地时区并不重要(除非您的时区是“正确”类型)。下面介绍如何使用Python 3.9,时区处理内置在标准库中,并带有模块(对于较旧的Python版本,使用
zoneinfo
via.Ex:


还有。例如:


您发布的代码根本无法运行,因为您命名了一个字符串
time
,然后尝试使用
time
包中的函数,该函数在该名称下不再可访问。
from datetime import datetime
from pytz import timezone
fmt = "%Y-%m-%d %H:%M:%S %Z%z"
now_time = datetime.now(timezone('US/Eastern'))
print now_time.strftime(fmt)
#!/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
#!/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)
from zoneinfo import ZoneInfo
from datetime import datetime, timezone

time = "Tue, 12 Jun 2012 14:03:10 GMT"

# parse to datetime, using %Z for the time zone abbreviation
dtobj = datetime.strptime(time, '%a, %d %b %Y %H:%M:%S %Z')

# note that "GMT" (=UTC) is ignored:
# datetime.datetime(2012, 6, 12, 14, 3, 10)

# ...so let's correct that:
dtobj = dtobj.replace(tzinfo=timezone.utc)
# datetime.datetime(2012, 6, 12, 14, 3, 10, tzinfo=datetime.timezone.utc)

# convert to US/Eastern (EST or EDT, depending on time of the year)
dtobj = dtobj.astimezone(ZoneInfo('US/Eastern'))
# datetime.datetime(2012, 6, 12, 10, 3, 10, tzinfo=zoneinfo.ZoneInfo(key='US/Eastern'))
print(dtobj)
# 2012-06-12 10:03:10-04:00
import dateutil
# no strptime needed...
# correctly localizes to GMT (=UTC) directly
dtobj = dateutil.parser.parse(time) 

dtobj = dtobj.astimezone(dateutil.tz.gettz('US/Eastern'))
# datetime.datetime(2012, 6, 12, 10, 3, 10, tzinfo=tzfile('US/Eastern'))
print(dtobj)
# 2012-06-12 10:03:10-04:00