我需要将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时间的任何原因?
答案 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)