2010-09-03 3 views
19

Мне нужно найти разницу во времени в секундах с помощью python. Я знаю, что могу получить разницу вот так:найти разницу во времени в секундах как целое число с python

from datetime import datetime 
now = datetime.now() 
.... 
.... 
.... 
later = datetime.now() 
difference = later-now 

Как получить разницу в общей сумме секунд?

ответ

22
import time 
now = time.time() 
... 
later = time.time() 
difference = int(later - now) 
+1

Это аргумент «TypeError: int() должен быть строкой, байтовым объектом или числом, а не« datetime.timedelta »ошибкой в ​​Python3. См. Ответ Роберта Лонгсона. – typoerrpr

2

Если все, что вам нужно, чтобы измерить промежуток времени, вы можете использовать time.time() функцию, которая возвращает секунд с начала эпохи в виде числа с плавающей точкой.

+0

cool, как создать объект datetime с плавающей точкой в ​​секундах, чтобы распечатать его красиво? – Richard

+0

Вы говорите о разнице во времени или абсолютном времени? Последний может быть преобразован из необработанного количества секунд в структуру времени (с полями года, месяца и т. Д.) С 'time.localtime()' или 'time.gmtime()', а затем либо преобразован в строку с 'time.asctime () '/''time.strftime()' или используется для создания объекта 'datetime.datetime'. Я не уверен, есть ли какая-либо функция в стандартной библиотеке Python, чтобы разделить/распечатать временную разницу (хотя это намного проще, чем правильное представление абсолютного времени). – rkhayrov

6

Метод total_seconds возвращает разницу, включая любую дробную часть.

from datetime import datetime 
now = datetime.now() 
... 
later = datetime.now() 
difference = (later - now).total_seconds() 

Вы можете конвертировать, что в целое через Int(), если вы хотите

+1

Я получаю 'AttributeError: 'float' объект не имеет атрибута 'total_seconds'' –

2

Суммируя условий timedelta кортежа с адекватными умножителей должны дать вам ответ. diff.days*24*60*60 + difference.seconds

from datetime import datetime 
now = datetime.now() 
... 
later = datetime.now() 
diff = later-now 
diff_in_seconds = diff.days*24*60*60 + diff.seconds 

Переменная «Diff» представляет собой timedelta объект, который является кортеж (дни, секунды, микросекунды), как описано здесь подробно https://docs.python.org/2.4/lib/datetime-timedelta.html. Все остальные единицы (часы, минуты) преобразуются в этот формат.

>> diff = later- now 
>> diff 
datetime.timedelta(0, 8526, 689000) 
>> diff_in_seconds = diff.days*24*60*60 + diff.seconds 
>> diff_in_seconds 
>> 8527 

Другой способ смотреть на это было бы, если бы вместо позже, теперь (поэтому положительная разница во времени), то вместо того, чтобы иметь разницу отрицательное времени (раньше-сейчас), где время, прошедшее между этими двумя все то же, как и в предыдущем примере

>> diff = earlier-now 
>> diff 
datetime.timedelta(-1, 77873, 311000) 
>> diff_in_seconds = diff.days*24*60*60 + diff.seconds 
>> diff_in_seconds 
>> -8527 

Таким образом, даже если мы уверены, что продолжительность составляет менее 1 день, то необходимо взять дневный срок во внимание, так как она является важным условием в случае отрицательная разница во времени.

Смежные вопросы