我正在通过aws中的python运行查询,并将sql结果显示在由datetime对象组成的元组中。
样本记录:
'('BlaBla', '20190212', 'Blabla', 'job_name',
datetime.datetime(2019, 2, 13, 18, 4, 41),
datetime.datetime(2019, 2, 13, 18, 4, 43))'
我在上面的记录上使用了逻辑,然后转换为下面的
['BlaBla', '20190212', 'BlaBla', 'jobname',
'2019-02-13 14:26:49',
'2019-02-13 14:26:52']
仅供参考,时间不一样,我粘贴了第二条记录作为样本。时间是格林尼治标准时间
现在我有一个元组列表,如何将元组的日期时间对象转换为PST?
我已经研究了astimezone函数,但是我正在获得
ValueError: astimezone() cannot be applied to a naive datetime
我也尝试过
d = local_tz.localize(datetime(2019, 2, 13, 17, 1, 27),is_dst=None)
遇到错误,似乎什么也没有。
TypeError: 'module' object is not callable
我们将不胜感激。
答案 0 :(得分:0)
这是我基于python documentation的解决方案。我想知道我是否仍然缺少某些地方,必须从头开始创建所有这些tzinfo子类。老实说,我希望它们成为日期时间库的一部分。
from datetime import tzinfo, timedelta, datetime
ZERO = timedelta(0)
HOUR = timedelta(hours=1)
# A UTC class.
class UTC(tzinfo):
"""UTC"""
def utcoffset(self, dt):
return ZERO
def tzname(self, dt):
return "UTC"
def dst(self, dt):
return ZERO
class PST(tzinfo):
"""PST"""
def utcoffset(self, dt):
return timedelta(hours=8) + self.dst(dt)
def tzname(self, dt):
return "PST"
def dst(self, dt):
# DST starts last Sunday in March
d = datetime(dt.year, 4, 1) # ends last Sunday in October
self.dston = d - timedelta(days=d.weekday() + 1)
d = datetime(dt.year, 11, 1)
self.dstoff = d - timedelta(days=d.weekday() + 1)
if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
return timedelta(hours=1)
else:
return timedelta(0)
utc = UTC()
pst = PST()
>>>dt1 = datetime(2019,2,13,14,26,49, tzinfo=utc)
datetime.datetime(2019, 2, 13, 14, 26, 49, tzinfo=<dtime_test.UTC object at 0x00000180AF6F1F60>)
>>>dt1.astimezone(pst)
datetime.datetime(2019, 2, 13, 22, 26, 49, tzinfo=<dtime_test.PST object at 0x00000180AF934080>)