python - 有没有更好的方法将 datetime.datetime 对象从 gmt 转换为 pst?

标签 python mysql list

我正在 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/

相关文章:

mysql - 使用触发器对表执行插入或更新

c# - 无法将 .List<string> 转换为字符串

c - 反向打印双向链表,仅打印第一个元素

python - 美汤-查找 child 标签属性内容

mysql - 如何计算 MySQL 中选定的行数?

python - 无 M2Crypto 的非分离 PKCS#7 SHA1+RSA 签名

php - 如何使用 php 更新 sql 中的图像

python - 列表中多个最小元素的索引

python - Exif阅读库

python - 如何在Mac上使用Tkinter播放.wav文件?