是否有更好的方法将datetime.datetime对象从gmt转换为pst?

时间:2019-02-14 00:06:07

标签: python mysql list

我正在通过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

我们将不胜感激。

1 个答案:

答案 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>)