日期时间:从时区名称为的字符串的转换不起作用

2024-05-14 11:06:03 发布

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

我有下面的字符串"2017-03-30 08:25:00CET",我想把它转换成一个支持datetime-tz的对象。在

根据this SO question,在python3.2中,只使用datetime模块就可以完成。另外,从documentation来看

%z |  UTC offset in the form +HHMM or -HHMM (empty string if the object is naive). |  (empty), +0000, -0400, +1030
%Z |  Time zone name (empty string if the object is naive).                        |  (empty), UTC, EST, CST

所以我试试下面的方法

datetime.strptime(dep_dt, '%Y-%m-%d %H:%M:%S%Z')

我没有得到任何错误,但是我得到的对象不是tz感知的

^{pr2}$

另一方面,如果我将字符串转换为"2017-03-30 08:25:00+0200",然后将其转换为具有

datetime.strptime(dep_dt, '%Y-%m-%d %H:%M:%S%z')

我确实知道时间:

datetime.datetime(2017, 3, 30, 8, 25, tzinfo=datetime.timezone(datetime.timedelta(0, 7200)))

有什么想法可以解释为什么它与%z一起工作,而不能与{}一起工作?我做错什么了?在


Tags: the对象字符串datetimestringifobjectis
1条回答
网友
1楼 · 发布于 2024-05-14 11:06:03

tzinfo提供的信息来看,%Z的工作方式与输入"UTC"的字符串不同,它将返回一个带有正确时区的datetime实例。在

pytz为您的问题提供了一个可能的解决方案。但是,文档中说,不能保证您的时区会被datetime识别,因此建议您尽可能长时间地使用UTC。在

使用pytz的解决方案:

from datetime import datetime
from pytz import timezone
dep_dt = '2017-03-30 08:25:00CET'
dt = datetime.strptime(dep_dt, '%Y-%m-%d %H:%M:%S%Z')
timezone(dep_dt[19:]).localize(dt)

输出:

^{pr2}$

相关问题 更多 >

    热门问题