astimezone()不能应用于naive datetim

2024-04-29 09:37:34 发布

您现在位置:Python中文网/ 问答频道 /正文

可能的时区()和日期时间在时间等方面与我的操作系统冲突吗?

一开始这是一个愚蠢的问题,因为我有这个问题,我看不出为什么或从哪里发生。

看这个:

def parse_datetime(a_datetime, account):
    tz = pytz.timezone(account.timezone_name)
    return datetime.astimezone(parser.parse(a_datetime), tz)

这个函数应该返回一个很好的datetime对象作为timezone(),仅此而已!但是不要!

我只知道我得到了这样一条消息:astimezone()不能应用于天真的datetime()

因为我有同样功能的朋友,而且在他们的电脑里,代码运行正常,但在我的情况下不行。

特别是:你机器的配置有问题…但不确定。

如果有其他人面对这一切,知道它只是在读什么,好吧,如果你告诉我,我会很高兴。提前谢谢!


Tags: 对象函数nameparser消息datetimereturnparse
1条回答
网友
1楼 · 发布于 2024-04-29 09:37:34

您使用了错误的方法将时区附加到datetime对象。

^{} page中所述,您希望对datetime对象而不是类调用该方法

def parse_datetime(a_datetime, account):
    tz = pytz.timezone(account.timezone_name)
    return parser.parse(a_datetime).astimezone(tz)

这只适用于已经本地化的对象(比如说,时区是UTC)。

正如同一文档所指出的,您最好在时区对象上使用.localize()方法:

def parse_datetime(a_datetime, account):
    tz = pytz.timezone(account.timezone_name)
    return tz.localize(parser.parse(a_datetime))

这适用于朴素的datetime对象,也适用于具有历史数据的时区。

如果您有混合数据,有些有时区,有些没有时区,那么您应该测试已经存在的时区:

def parse_datetime(a_datetime, account):
    dt = parser.parse(a_datetime)
    if dt.tzinfo is None:
        tz = pytz.timezone(account.timezone_name)
        dt = tz.localize(dt)
    return dt

已经附加了时区的时间戳将导致识别时区的datetime对象,而不需要重新键入另一个时区。

相关问题 更多 >