W podanym formacie data 2014-01-02 będzie reprezentowana przez "20140102". To jest właściwie analizowany ze standardowym strptime:Dlaczego wartości Pythona datetime.datetime.strptime ("201412", "% Y% m% d") nie powodują błędu ValueError?
>>> datetime.datetime.strptime("20140102", "%Y%m%d")
datetime.datetime(2014, 1, 2, 0, 0)
W tym formacie, „201412” to nie być ważna data. docs mówi, że dyrektywa "% m" to "Miesiąc jako liczba dziesiętna z wyściełaną zerą". Podaje jako przykłady "01, 02, ..., 12". Dyrektywa "% d" również ma mieć zerowy margines.
podstawie tego, spodziewałem się, że „201412” byłby nieważny z tego formatu wejściowego, tak by podnieść ValueError. Zamiast tego, jest interpretowany jako 2014-01-02:
>>> datetime.datetime.strptime("201412", "%Y%m%d")
datetime.datetime(2014, 1, 2, 0, 0)
Pytanie brzmi: czy jest jakiś sposób, aby określić „no poważnie zero-wyściełane tylko”? Czy nie rozumiem w tym kontekście terminu "zero-watded"?
Należy zauważyć, że pytanie nie jest o tym, jak analizować datę w tym formacie, ale o zrozumienie zachowania strptime.
nie naprawdę pomóc, ale jest nieco pokrewny (myślę '/' pola oddzielone) [Analizowanie non-zerami znacznik czasu w python] (http://stackoverflow.com/ pytania/25279993/parsowanie-nie-zero-wyściełane-sygnatury czasowe-w-pythonie) – metatoaster
Myślę, że to zależy od zwykłego wyrażenia, którego funkcja używa. – kiviak
Wygląda na to, że pewne dodatkowe wyjaśnienie w dokumentach Pythona byłoby miłe. Czy jest zagwarantowane, że 'strptime (" 2014123 ","% Y% m% d ")' zawsze da 'datetime (2014, 12, 3, 0, 0)' lub może to być 'datetime (2014, 1, 23, 0, 0) "? – Matthias