我有一个来自Blackberry IPD备份的CSV转储文件,使用IPDDump创建.

Tue Jun 22 07:46:22 EST 2010

我需要能够用Python解析这个日期.首先,我try 使用来自datettime的strptime()函数.

>>> datetime.datetime.strptime('Tue Jun 22 12:10:20 2010 EST', '%a %b %d %H:%M:%S %Y %Z')

但是,由于某些原因,返回的datetime对象似乎没有任何tzinfo与其关联.

我确实在this page上读到,显然datetime.strptime会悄悄丢弃tzinfo,然而,我判断了文档,我找不到任何与此相关的文档here.

我已经能够使用第三方Python库dateutil来解析日期,但是我仍然很好奇我是如何错误地使用内置strptime()的?有没有办法让strptime()很好地使用时区?

推荐答案

datetime module documentation人说:

返回与date_字符串相对应的datetime,并根据格式进行分析.这相当于datetime(*(time.strptime(date_string, format)[0:6])).

看到[0:6]了吗?那你就(year, month, day, hour, minute, second)岁了.没别的了.没有提到时区.

有趣的是,[Win XP SP2,Python 2.6,2.7]将示例传递给time.strptime不起作用,但如果go 掉"%Z"和"EST",它确实起作用.用"UTC"或"GMT"代替"EST"也可以."PST"和"MEZ"不起作用.令人费解.

值得注意的是,此功能已从3.2版更新,相同的文档现在还说明了以下内容:

将%z指令提供给strptime()方法时,将生成一个感知的DateTime对象.结果的tzinfo将设置为时区实例.

请注意,这不适用于%Z,因此 case 很重要.请参见以下示例:

In [1]: from datetime import datetime

In [2]: start_time = datetime.strptime('2018-04-18-17-04-30-AEST','%Y-%m-%d-%H-%M-%S-%Z')

In [3]: print("TZ NAME: {tz}".format(tz=start_time.tzname()))
TZ NAME: None

In [4]: start_time = datetime.strptime('2018-04-18-17-04-30-+1000','%Y-%m-%d-%H-%M-%S-%z')

In [5]: print("TZ NAME: {tz}".format(tz=start_time.tzname()))
TZ NAME: UTC+10:00

Python相关问答推荐

无法使用equals_html从网址获取全文

比较两个二元组列表,NP.isin

从webhook中的短代码(而不是电话号码)接收Twilio消息

时间序列分解

删除最后一个pip安装的包

将pandas Dataframe转换为3D numpy矩阵

通过pandas向每个非空单元格添加子字符串

在Mac上安装ipython

try 将一行连接到Tensorflow中的矩阵

如何从数据库上传数据到html?

Django REST Framework:无法正确地将值注释到多对多模型,不断得到错误字段名称字段对模型无效'<><>

Python列表不会在条件while循环中正确随机化'

Python避免mypy在相互引用中从另一个类重定义类时失败

pandas fill和bfill基于另一列中的条件

如何重新组织我的Pandas DataFrame,使列名成为列值?

没有内置pip模块的Python3.11--S在做什么?

如何在信号的FFT中获得正确的频率幅值

提取最内层嵌套链接

read_csv分隔符正在创建无关的空列

有了Gekko,可以创建子模型或将模型合并在一起吗?