Вот альтернативный подход с использованием регулярного выражения, которое вы можете (или не можете) найти более чистым:
import re
timestamp = "2010-06-19T08:17:14.078685237Z"
ts_regex = re.compile(r"(\d{4})-(\d{1,2})-(\d{1,2})T(\d{2}):(\d{2}):(\d{2})\.(\d{6})")
precisetime = datetime.datetime(*map(int, ts_regex.match(timestamp).groups()))
Здесь оно разбито на несколько дополнительных шагов для обеспечения некоторой ясности:
>>> ts_regex.match(timestamp).groups()
('2010', '06', '19', '08', '17', '14', '078685')
>>> map(int, ts_regex.match(timestamp).groups())
[2010, 6, 19, 8, 17, 14, 78685]
Мы можем передать этот список непосредственно в инициализацию объекта datetime
, используя расширение аргумента с помощью *
, поскольку аргументы находятся в правильном порядке.