Python将格式化的字符串解析为{Timestamp}

时间:2017-12-12 06:42:19

标签: python parsing datetime 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新手,我想我错过了一些东西。

修改

使用datetime.strptime我需要一种格式,因为字符串已经格式化我希望解析它而不显式构建格式。

3 个答案:

答案 0 :(得分:0)

使用datetime.strptime(字符串,格式)方法。找出两种方法之间的区别: strptime =“字符串解析时间” strftime =“字符串格式时间”

答案 1 :(得分:0)

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

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

这里有一些代码可以使用datetime.strptime来完成日期/时间解析。它只是忽略了时间数据的最后两个字符,并取代了' Z'使用' UTC'时区字符串。

BTW,我不得不稍微调整你的输入字符串:你在问题中发布的字符串不是有效的字符串文字。

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)

答案 2 :(得分:-1)

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

mmap