当milliseonds有6位数时,%f有效,但如果超过6位数则会抛出错误。我有一个临时的解决方案,硬编码0为第7位,但有更好的方法吗?目前以下作品
print (datetime.datetime.strptime(('2014-11-19 00:00:00.0000000').strip(), '%Y-%m-%d %H:%M:%S.0%f')).date()
答案 0 :(得分:2)
根据datetime.strptime()
https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior的文档,技术说明(4),%f只接受1到6个字符:
%f是C标准中格式字符集的扩展名 (但是在datetime对象中单独实现,因此总是如此 可用)。当与strptime()方法一起使用时,%f指令 接受一到六位数字和右边的零焊盘。
我不相信你已经正确地解决了这个问题。你不应该在字符串前加零,而是将所有内容放在6以上(这对于贡献时间来说不那么重要)。
这样的事情:
s='2014-11-19 00:00:00.0000000'
print (datetime.datetime.strptime((s[:26]).strip(), '%Y-%m-%d %H:%M:%S.%f')).date()
答案 1 :(得分:0)
如果您只想要日期,只需提取日期!
>>> datetime_string = '2014-11-19 00:00:00.0000000'
>>> date_string = datetime_string[:10]
>>> date_string
'2014-11-19'
>>> print(datetime.strptime(date_string, '%Y-%m-%d')).date()
2014-11-19
答案 2 :(得分:0)
我认为评论#1中的解决方案还可以,但需要进行一些修正,
使用如下,
{{1}}
它将删除所有空格,然后从字符串的开头取26个字符,并传递给strptime()方法。