Python доля секунд - PullRequest
       6

Python доля секунд

16 голосов
/ 05 декабря 2009

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

Ответы [ 4 ]

27 голосов
/ 05 декабря 2009

В модуле 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. </p>

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

4 голосов
/ 05 декабря 2009

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

>>> from datetime import datetime
>>> t=datetime.now()
>>> t.microsecond
519943
1 голос
/ 05 декабря 2009

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

В противном случае я бы использовал обычные субсекундные даты и времени.

0 голосов
/ 05 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...