Jestem w stanie analizować ciągi zawierające datę / godzinę z czasem. Strptime
>>> import time
>>> time.strptime('30/03/09 16:31:32', '%d/%m/%y %H:%M:%S')
(2009, 3, 30, 16, 31, 32, 0, 89, -1)
Jak parsować ciąg czasu zawierający milisekundy?
>>> time.strptime('30/03/09 16:31:32.123', '%d/%m/%y %H:%M:%S')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.5/_strptime.py", line 333, in strptime
data_string[found.end():])
ValueError: unconverted data remains: .123
python
date
time
datetime-parsing
ilkinulas
źródło
źródło
%f
.%f
jest uzupełniona zerami po prawej stronie (nie w lewo!) Do 6 miejsc po przecinku. 1 zostaje sparsowany do 100000, 12 zostaje sparsowany do 120000, a 1234567 produkujeValueError: unconverted data remains: 7
Wiem, że to starsze pytanie, ale nadal używam Python 2.4.3 i musiałem znaleźć lepszy sposób na konwersję ciągu danych na datę i godzinę.
Rozwiązaniem, jeśli datetime nie obsługuje% f i nie wymaga próby / wyjątku, jest:
Działa to w przypadku ciągu wejściowego „2010-10-06 09: 42: 52.266000”
źródło
dt.replace(microsecond=int(mSecs))
Aby podać kod, do którego odnosi się odpowiedź nstehr (z jego źródła ):
źródło
Powyższa odpowiedź DNS jest w rzeczywistości niepoprawna. SO pyta o milisekundy, ale odpowiedź dotyczy mikrosekund. Niestety, Python nie ma dyrektywy dla milisekund, tylko mikrosekundy (patrz dokument ), ale można to obejść, dodając trzy zera na końcu ciągu i analizując ciąg jako mikrosekundy, coś w stylu:
gdzie
time_str
jest sformatowany jak30/03/09 16:31:32.123
.Mam nadzieję że to pomoże.
źródło
.123
jest poprawnie interpretowany jako 123 000 mikrosekundMoją pierwszą myślą było spróbowanie podania go „30/03/09 16: 31: 32.123” (z kropką zamiast dwukropka między sekundami a milisekundami). Ale to nie zadziałało. Szybkie spojrzenie na dokumentację wskazuje, że ułamki sekund są w każdym razie ignorowane ...
Ach, różnice wersji. Zostało to zgłoszone jako błąd i teraz w 2.6+ można użyć „% S.% f”, aby je przeanalizować.
źródło
z list mailowych Pythona: parsowanie wątku milisekundowego . Jest tam opublikowana funkcja, która zdaje się wykonywać zadanie, chociaż jak wspomniano w komentarzach autora, jest to rodzaj włamania. Używa wyrażeń regularnych do obsługi zgłaszanego wyjątku, a następnie wykonuje pewne obliczenia.
Możesz także spróbować wykonać wyrażenia regularne i obliczenia z góry, zanim przekażesz je do strptime.
źródło
Zrobiłem to dla Pythona 2
wypisuje czas „% H:% M:% S”, dzieli time.time () na dwa podłańcuchy (przed i po.) xxxxxxx.xx, a ponieważ .xx to moje milisekundy, dodaję drugi podłańcuch do mojego „% H:% M:% S ”
mam nadzieję, że to ma sens :) Przykładowy wynik:
13: 31: 21,81 KONIEC RÓŻNICY 01
13: 31: 26,3 Mrugnięcie 01
13: 31: 26,39 KONIEC RÓŻNICY 01
13: 31: 34.65 Linia startowa 01
źródło