Io uso una dichiarazione, come indicato di seguito per creare un oggetto datetime
da una stringa:`` datetime.strftime` e datetime.strptime` interprete% Y diverso
t = datetime.strptime("0023-10-10", "%Y-%m-%d")
Più tardi, da qualche parte nel mio utilizza il codice l'oggetto e t
richiamare il metodo strftime
con la stessa stringa di formato:
t.strftime("%Y-%m-%d")
Questo provoca un ValueError: year=23 is before 1900; the datetime strftime() methods require year >= 1900
.
Sembra che la convalida dell'input% Y sia diversa in questi due metodi simili. Quindi devo fare quanto segue per assicurarsi che io non accetto alcuni anni cattivi come 23
:
try:
format = "%Y-%m-%d"
t = datetime.strptime("0023-10-10", format)
t.strftime(format)
except ValueError:
...
Mi chiedo se c'è un modo migliore per fare questo la convalida.
Ancora non capisco perché questa restrizione non sia applicata a 'strptime'. – satoru
'datetime.strftime' alla fine chiama qualche funzione C,' strftime'. L'implementazione utilizzata è limitata a anni> = 1900, o 1000 a seconda della versione di Python. strptime è implementato in Python e non ha la stessa restrizione. Vedi questa [richiesta di funzionalità] (http://bugs.python.org/issue1777412). – unutbu