需要在Python中将UTC(aws ec2)转换为PST

时间:2012-01-10 20:02:55

标签: python

我需要将UTC时间(在ec2实例上)转换为PST。我想这样做。

from datetime import datetime
from pytz import timezone
import pytz

date_format='%m/%d/%Y %H:%M:%S %Z'
date = datetime.now()
print 'Current date & time is:', date.strftime(date_format)

my_timezone=timezone('US/Pacific')

date = my_timezone.localize(date)
date = date.astimezone(my_timezone)

print 'Local date & time is  :', date.strftime(date_format)

但输出是:

Current date & time is: 01/10/2012 20:01:14
Local date & time is  : 01/10/2012 20:01:14 PST

我没有获得正确的PST时间的任何原因?

5 个答案:

答案 0 :(得分:20)

from datetime import datetime
from pytz import timezone
import pytz

date_format='%m/%d/%Y %H:%M:%S %Z'
date = datetime.now(tz=pytz.utc)
print 'Current date & time is:', date.strftime(date_format)

date = date.astimezone(timezone('US/Pacific'))

print 'Local date & time is  :', date.strftime(date_format)

似乎对我有用:) - 时区令人困惑,慢慢制定一个我真正想做的计划,大部分时间帮助我

答案 1 :(得分:3)

如果您尝试在示例中模拟UTC时间,我认为您需要datetime.utcnow()

另一个问题是默认情况下该对象没有时区。这并不意味着它是UTC,我认为pytz只是默认为该对象的本地时间。在尝试将其转换为PST之前,需要创建一个时区设置为UTC的新datetime对象。

您可以通过

执行此操作
date = datetime.utcnow()
date.replace(tzinfo=pytz.utc)

答案 2 :(得分:3)

致电localize,告诉您TZ的时间。因此,在您的示例中,您说您的日期是在PST中,然后您为PST调用astimezone并获得预期的相同时间。您可能需要以下内容:

utc_dt = pytz.utc.localize(datetime.utcnow())
pst_tz = timezone('US/Pacific')
pst_dt = pst_tz.normalize(utc_dt.astimezone(pst_tz))
pst_dt.strftime(fmt)

抱歉,无法检查此代码是否已执行 - 请勿在工作站上安装此库。

答案 3 :(得分:1)

在一行中执行此操作:

>>> import pytz
>>> pytz.utc.localize(datetime.utcnow()).astimezone(pytz.timezone('US/Pacific'))
datetime.datetime(2016, 5, 16, 10, 58, 18, 413399, tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day, 17:00:00 DST>)

答案 4 :(得分:0)

如果您想根据EC2实例的启动时间计算当前正常运行时间,可以尝试这样做:

import datetime
lt_datetime = datetime.datetime.strptime(inst.launch_time, '%Y-%m-%dT%H:%M:%S')
lt_delta = datetime.datetime.utcnow() - lt_datetime
str(lt_delta)