Python解析格式的字符串到{timestamp}



我正在从数据库中加载字符串值({str}),这是值:

'W/"datetime\'2017-10-16T20%3A18%3A02.2644265Z\'"'

现在我需要将其转换为{timestamp}格式。

尝试了以下操作:

from datetime import datetime
datetime.strftime(MyStrValue)

并得到:

{TypeError}descriptor 'strftime' requires a 'datetime.date' object but received a 'str'

尝试了以下操作:

import dateutil.parser
dateutil.parser.parse(MyStrValue)

并得到:

{ValueError}Unknown string format

我知道它已经以正确的格式,但是我是python newbie,我想我缺少一些东西。

编辑:

要使用datetime.strptime我需要一种格式,因为字符串已经格式化,我希望在不明确构建格式的情况下对其进行解析。

使用dateTime.strptime(string,format)方法。找到两种方法之间的区别:strptime ="字符串解析时间"strftime ="字符串格式时间"

这有点棘手。首先,您需要从源字符串中提取实际的日期/时间字符串,然后需要将百分比编码的字符转换为适当的字符,最后您可以从中解析时间和日期。

但是,标准库无法处理数据的全职精度 - 它接受6位数字微秒字段,而不是7位数字。而且它不处理单个字母时区代码,您需要为此使用第三方模块。但是,如果您的所有字符串都使用" Z"时区,则很容易处理,因为那是UTC区域,即它的UTC偏移为零。

这是一些代码,可以接近您想要使用datetime.strptime进行日期/时间解析的代码。它只是忽略了时间数据的最后两个字符,然后用" UTC"时区字符串替换" Z"。

顺便说一句,我必须稍微调整您的输入字符串:您在问题中发布的字符串不是有效的字符串文字。

from urllib.parse import unquote
from datetime import datetime
mystr = 'W/"datetime'2017-10-16T20%3A18%3A02.2644265Z'"'
print('Original:', repr(mystr))
# Split on single-quotes
fields = mystr.split("'")
print('Fields:', fields)
# Convert percent-encoded chars to proper chars
datestr = unquote(fields[1])
print('Date:', datestr)
# Trim the final digit and the time zone letter, replacing it with 'UTC'
datestr = datestr[:-2] + 'UTC'
#Convert to a datetime object
timestamp = datetime.strptime(datestr, '%Y-%m-%dT%H:%M:%S.%f%Z')
print('Timestamp:', timestamp, repr(timestamp))

输出

Original: 'W/"datetime'2017-10-16T20%3A18%3A02.2644265Z'"'
Fields: ['W/"datetime', '2017-10-16T20%3A18%3A02.2644265Z', '"']
Date: 2017-10-16T20:18:02.2644265Z
Timestamp: 2017-10-16 20:18:02.264426 datetime.datetime(2017, 10, 16, 20, 18, 2, 264426)

最好的解决方案是使用解析器:

from dateutil import parser
date_obj = parser.parse(date_string)

最新更新