Preferisco usare le espressioni regolari invece di provare e tranne. Ciò consente molte fallback di formati accettabili.
# 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
Non dimenticare di importare "re" e "datetime" per questo metodo.
Fornisce risultati errati se, in "data_string', gli zero finali vengono omessi dalla parte del microsecondo. – jez
@jez: sì, è per questo che ho detto che è "troppo permissivo". Funziona solo se l'input ha il formato previsto (nessuna o 6 cifre per microsecondi). 2- sulla tua modifica: guarda la domanda: 'datetime' è la classe qui, non il modulo. – jfs