Fração de Python de segundos

Qual é a melhor maneira de lidar com partes de um segundo no Python? A biblioteca de datetime é excelente, mas, até onde posso dizer, não pode manipular nenhuma unidade com menos de um segundo.

No módulo datetime, as classs datetime, time e timedelta possuem a menor resolução de microssegundos:

>>> from datetime import datetime, timedelta >>> now = datetime.now() >>> now datetime.datetime(2009, 12, 4, 23, 3, 27, 343000) >>> now.microsecond 343000 

Se você quiser exibir um datetime com segundos fracionários, basta inserir um ponto decimal e alinhar zeros à direita:

 >>> now.strftime("%Y-%m-%d %H:%M:%S.%f").rstrip('0') '2009-12-04 23:03:27.343' 

as classs datetime e time aceitam apenas inputs inteiras e horas, minutos e segundos devem estar entre 0 e 59 e microssegundos devem estar entre 0 e 999999. A class timedelta, no entanto, aceitará valores de ponto flutuante com frações e fará todos os cálculos aritméticos apropriados para voce:

 >>> span = timedelta(seconds=3662.567) >>> span datetime.timedelta(0, 3662, 567000) 

Os componentes básicos do timedelta são dia, segundo e microssegundo (0, 3662, 567000 acima), mas o construtor também aceitará milissegundos, horas e semanas. Todas as inputs podem ser números inteiros ou flutuantes (positivos ou negativos). Todos os argumentos são convertidos para as unidades base e depois normalizados para que 0 <= segundos <60 e 0 <= microssegundos <1000000.

Você pode adicionar ou subtrair o intervalo a uma instância de data e hora ou a outro intervalo. Brincadeira, provavelmente você pode facilmente criar algumas funções ou classs para fazer exatamente o que você quer. Você provavelmente poderia fazer todo o seu processamento de data / hora usando instâncias de timedelta relativas a um datetime fixo, como basetime = datetime(2000,1,1,0,0,0) , e depois converter em um datetime ou instância de tempo para exibição ou armazenamento.

Para obter uma resposta melhor, você precisará especificar sua pergunta, mas isso deve mostrar pelo menos como o datetime pode manipular microssegundos :

 >>> from datetime import datetime >>> t=datetime.now() >>> t.microsecond 519943 

O NumPy 1.4 (no estágio de release candidate) tem suporte para seus próprios objects Date e DateArray. A única vantagem é que ele suporta freqüências menores que femtossegundos: http://projects.scipy.org/numpy/browser/trunk/doc/neps/datetime-proposal.rst

Caso contrário, eu iria com as frequências de subsegundo regulares de data e hora.

Para qual propósito? import time -> time.clock () retorna a hora atual em milissegundos, para que possa ser usada para propósitos de temporização com precisão de milissegundos.