Подтвердить что ты не робот

Доля Python в секундах

Каков наилучший способ обработки частей секунды в Python? Библиотека datetime превосходна, но, насколько я могу судить, она не может обрабатывать ни одну единицу меньше секунды.

4b9b3361

Ответ 1

В модуле datetime классы datetime, time и timedelta имеют наименьшее разрешение микросекунд:

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

если вы хотите отобразить дату и время с дробными секундами, просто вставьте десятичную точку и разделите нулевые нули:

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

классы datetime и time принимают только целочисленный ввод, а часы, минуты и секунды должны быть между 0 и 59, а микросекунды должны быть между 0 и 999999. Однако класс timedelta будет принимать значения с плавающей запятой с дробями и делать все правильная по модулю арифметика для вас:

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

Основными компонентами timedelta являются день, секунда и микросекунда (0, 3662, 567000 выше), но конструктор также принимает миллисекунды, часы и недели. Все входы могут быть целыми числами или поплавками (положительными или отрицательными). Все аргументы преобразуются в базовые единицы и затем нормализуются так, что 0 <= секунды < 60 и 0 <= микросекунд < 1000000.

Вы можете добавить или вычесть диапазон на экземпляр datetime или time или на другой диапазон. Окунитесь в нее, вы, вероятно, можете легко придумать некоторые функции или классы, чтобы делать то, что вы хотите. Вероятно, вы могли бы выполнять всю обработку даты и времени с использованием экземпляров timedelta относительно некоторого фиксированного времени datetime, например basetime = datetime(2000,1,1,0,0,0), а затем преобразовать в экземпляр datetime или time для отображения или хранения.

Ответ 2

Чтобы получить лучший ответ, вам нужно указать свой вопрос дальше, но это должно показать, по крайней мере, как datetime может обрабатывать микросекунды:

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

Ответ 3

NumPy 1.4 (в стадии выбора кандидата) поддерживает свои собственные объекты Date и DateArray. Единственным преимуществом является то, что он поддерживает частоты, меньшие, чем фемтосекунды: http://projects.scipy.org/numpy/browser/trunk/doc/neps/datetime-proposal.rst

В противном случае я бы пошел с регулярными подсеточными частотами datetime.

Ответ 4

Другой, не упомянутый подход, который мне нравится:

from datetime import datetime
from time import sleep

t0 = datetime.now()
sleep(3)
t1 = datetime.now()
tdelta = t1 - t0
print(tdelta.total_seconds())
# will print something near (but not exactly 3)
# 3.0067

Ответ 5

С какой целью? import time → time.clock() возвращает текущее время в миллисекундах, поэтому его можно использовать для целей синхронизации до миллисекундной точности.