Eu sou capaz de analisar seqüências de caracteres contendo data / hora com time.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)
Como posso analisar uma seqüência de tempo que contém milissegundos?
>>> 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
fonte
fonte
%f
.%f
é preenchido com zeros à direita (não à esquerda!) Com 6 casas decimais. 1 é analisado para 100000, 12 é analisado para 120000 e 1234567 produzValueError: unconverted data remains: 7
Sei que essa é uma pergunta mais antiga, mas ainda estou usando o Python 2.4.3 e precisava encontrar uma maneira melhor de converter a sequência de dados em um datetime.
A solução se datetime não suportar% f e sem precisar de uma tentativa / exceto é:
Isso funciona para a string de entrada "2010-10-06 09: 42: 52.266000"
fonte
dt.replace(microsecond=int(mSecs))
Para fornecer o código ao qual a resposta do nstehr se refere (de sua fonte ):
fonte
A resposta DNS acima está realmente incorreta. O SO está perguntando sobre milissegundos, mas a resposta é para microssegundos. Infelizmente, o Python`s não possui uma diretiva para milissegundos, apenas microssegundos (consulte o documento ), mas você pode contornar isso adicionando três zeros no final da string e analisando a string como microssegundos, algo como:
onde
time_str
é formatado como30/03/09 16:31:32.123
.Espero que isto ajude.
fonte
.123
é corretamente interpretada como 123.000 microssegundosMeu primeiro pensamento foi tentar transmiti-lo '30 / 03/09 16: 31: 32.123 '(com um ponto em vez de dois pontos entre os segundos e os milissegundos.) Mas isso não funcionou. Uma rápida olhada nos documentos indica que os segundos fracionários são ignorados em qualquer caso ...
Ah, diferenças de versão. Isso foi relatado como um bug e agora no 2.6+ você pode usar "% S.% f" para analisá-lo.
fonte
das listas de discussão em python: analisando o segmento de milissegundos . Há uma função postada lá que parece fazer o trabalho, embora, como mencionado nos comentários do autor, seja uma espécie de hack. Ele usa expressões regulares para lidar com a exceção levantada e, em seguida, faz alguns cálculos.
Você também pode tentar fazer as expressões regulares e os cálculos antecipadamente, antes de passar para strptime.
fonte
Para python 2 eu fiz isso
imprime o tempo "% H:% M:% S", divide o time.time () em duas substrings (antes e depois do.) xxxxxxx.xx e como .xx são meus milissegundos, adiciono a segunda substring ao meu "% H:% M:% S "
espero que faça sentido :) Exemplo de saída:
13: 31: 21.81 FIM DO INTERVALO 01
13: 31: 26.3 Piscar 01
13: 31: 26.39 FIM DO INTERVALO 01
13: 31: 34.65 Pista inicial 01
fonte