Я предпочитаю использовать регулярные выражения вместо try и except. Это позволяет использовать множество резервных копий приемлемых форматов.
# full timestamp with milliseconds
match = re.match(r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z", date_string)
if match:
return datetime.strptime(date_string, "%Y-%m-%dT%H:%M:%S.%fZ")
# timestamp missing milliseconds
match = re.match(r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z", date_string)
if match:
return datetime.strptime(date_string, "%Y-%m-%dT%H:%M:%SZ")
# timestamp missing milliseconds & seconds
match = re.match(r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}Z", date_string)
if match:
return datetime.strptime(date_string, "%Y-%m-%dT%H:%MZ")
# unknown timestamp format
return false
Не забудьте импортировать «re», а также «datetime» для этого метода.
Это дает неверные результаты, если в 'date_string' конечные нули пропущены из микросекундной части. – jez
@jez: да, вот почему я сказал, что это «слишком разрешительно». Он работает только в том случае, если вход имеет ожидаемый формат (нет или 6 цифр для микросекунд). 2- о вашем редактировании: посмотрите на вопрос: 'datetime' - это класс здесь, а не модуль. – jfs