我正在 aws 中通过 python 运行查询,并获取由日期时间对象组成的元组中的 sql 结果。
样本记录:
'('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']
仅供引用,时间不一样,我粘贴了第二条记录作为示例。时间为 GMT
现在我有一个元组列表,如何将元组的日期时间对象转换为 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
任何帮助将不胜感激..
最佳答案
这是我基于 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>)
关于python - 有没有更好的方法将 datetime.datetime 对象从 gmt 转换为 pst?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54681336/