我从数据库加载字符串值({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
我需要一种格式,因为字符串已经格式化我希望解析它而不显式构建格式。
答案 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