如何将包含7位数字(毫秒)的日期字符串转换为Python中的日期

问题描述:

当毫秒数为6位时,%f起作用,但如果超过6位数字,则会引发错误。我有一个临时解决方案,对第7位数字进行硬编码,但是有更好的方法吗?目前,下面的工作如何将包含7位数字(毫秒)的日期字符串转换为Python中的日期

print (datetime.datetime.strptime(('2014-11-19 00:00:00.0000000').strip(), '%Y-%m-%d %H:%M:%S.0%f')).date() 
+0

为什么不只是修剪,如果它是'0'? – EdChum

+0

此限制记录在datetime文档中。我建议你使用箭头库:http://crsmithdev.com/arrow/ – Guillaume

datetime.strptime()https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior,技术说明(4)文件,%F只接受1 - 6个字符:

%f是一个扩展集格式字符在C标准 (但在日期时间对象中分开实施,因此始终可用 )。当与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() 
+0

这很好用。另一个疑问是,[:26]在这里指的是什么? – Dgstah

+0

您提供了27个字符的日期字符串。 s [:26]将其修剪为26个字符。 – user590028

如果你只想要日期,只能提取日期!

>>> 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 

我觉得在评论#1的解决方案是好的,但需要一定的修正,

使用它就像下面,

s='2014-11-19  00:00:00.0000000' 
print (datetime.datetime.strptime(s.strip()).[:26], '%Y-%m-%d %H:%M:%S.%f')).date() 

它会删除所有空格然后从字符串的开始采取26个字符并传递给strptime()方法。