Wolę używać dopasowań regularnych zamiast try i except. Pozwala to na wiele niepowodzeń w akceptowalnych formatach.
# 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
Nie zapomnij zaimportować "re" oraz "datetime" dla tej metody.
Daje to nieprawidłowe wyniki, jeśli w 'date_string', końcowe zera są pominięte w części mikrosekundy. – jez
@jez: tak, dlatego powiedziałem, że jest "zbyt liberalne". Działa tylko wtedy, gdy wejście ma oczekiwany format (brak lub 6 cyfr dla mikrosekund). 2- o twojej edycji: spójrz na pytanie: 'datetime' to klasa tutaj, a nie moduł. – jfs