używam oświadczenie, jak pokazano poniżej, aby utworzyć datetime
obiektu z ciągiem:`datetime.strftime` i` datetime.strptime` Interprete% Y inaczej
t = datetime.strptime("0023-10-10", "%Y-%m-%d")
Później, gdzieś w moich zastosowań kodowych przedmiotem t
i wywołać metodę strftime
z tego samego formatu ciąg:
t.strftime("%Y-%m-%d")
powoduje to ValueError: year=23 is before 1900; the datetime strftime() methods require year >= 1900
.
Wygląda na to, że walidacja wejścia% Y jest różna w tych dwóch podobnych metodach. Więc muszę wykonać następujące czynności, aby upewnić się, że nie akceptują złe lata jak 23
:
try:
format = "%Y-%m-%d"
t = datetime.strptime("0023-10-10", format)
t.strftime(format)
except ValueError:
...
Zastanawiam się, czy istnieje lepszy sposób to zrobić walidacji.
Nadal nie rozumiem, dlaczego to ograniczenie nie jest stosowane do 'strptime'. – satoru
'datetime.strftime' ostatecznie wywołuje niektóre funkcje C,' strftime. Stosowana implementacja jest ograniczona do lat> = 1900 lub 1000 w zależności od wersji Pythona. strptime jest implementowany w Pythonie i nie ma takiego samego ograniczenia. Zobacz tę [prośbę o funkcję] (http://bugs.python.org/issue1777412). – unutbu