W Pythonie 3 można wygenerować datę ISO 8601 z .isoformat(), ale nie można przekonwertować ciągu utworzonego przez isoformat() z powrotem do obiekt datetime, ponieważ dyrektywy Pythona mają własną dyrektywę datetime. tj:% z = 0500 zamiast 05:00 (który jest produkowany przez .isoformat()). Na przykład:Jak przekonwertować ciąg python .isoformat() na obiekt datetime
>>> strDate = d.isoformat()
>>> strDate
'2015-02-04T20:55:08.914461+00:00'
>>> objDate = datetime.strptime(strDate,"%Y-%m-%dT%H:%M:%S.%f%z")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python34\Lib\_strptime.py", line 500, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "C:\Python34\Lib\_strptime.py", line 337, in _strptime
(data_string, format))
ValueError: time data '2015-02-04T20:55:08.914461+00:00' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'
Z dokumentacji strptime Pythona: (https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior)
% Z UTC przesunięcie w postaci + HHMM lub -HHMM (pusty ciąg jeżeli przedmiotem jest naiwny). (pusty), +0000, -0400, +1030
Krótko mówiąc, Python nawet nie stosuje się do własnych dyrektyw formatujących ciągi znaków.
Wiem, że datetime jest już straszne w Pythonie, ale to naprawdę wykracza poza nieuzasadnione w krainę zwykłej głupoty.
Powiedz mi, że to nie jest prawda.
Czy rozważałeś usunięcie ostatniego dwukropka z isoformatowanego łańcucha, a następnie przeanalizowanie go z powrotem do obiektu datetime? To obejście, które można jeszcze zrobić nieco elegancko. –
@OliverW. Rozważyłem to, w końcu skończyłem poddając się i instalując python-dateutil. W rzeczywistości nie uważam tego za dobre rozwiązanie. Myślę, że ci, którzy są odpowiedzialni za pythona, muszą przyjrzeć się temu, co zrobili z datetime. Odtąd już się poddałem i po prostu przeskoczę przez obręcze, jak wszyscy inni. –
Zawsze byłem szczególnie pod wrażeniem Pythona dla funkcji HAVING takich jak strptime i strftime, nigdy nawet nie zauważyłem tego szczególnego niedoboru, ponieważ jak już wspomniano, można go raczej elegancko unikać. –