Как узнать количество секунд между двумя датами со стрелкой?

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

>>> import arrow
>>> first = arrow.get('2019-03-06')
>>> second = arrow.get('2019-02-06')
>>> (first-second).days
28
>>> (first-second).seconds
0

Из приведенного выше примера выглядит .days дает ожидаемый результат, но .seconds скорее дает количество секунд, которые есть "на уровне секунд", то есть, когда вы смотрите исключительно на секунды. Это будет означать, что максимальное количество 60,

Это не правда, однако:

>>> (arrow.now()-first).seconds
70223

70000 секунд - это приблизительно 19 часов, что будет правильным количеством часов между последней полуночью (началом сегодняшнего дня) и сейчас (около 20:30).

Так что я потерялся при чем .seconds на самом деле обеспечивает.

2 ответа

Свойство секунд отражает разницу между первым и вторым, только если они находятся в пределах одного дня. Если дни больше 1 дня, свойство days получает приращение на единицу, а свойство секунд сбрасывается в ноль. Если вы хотите получить общее количество секунд между ними, вызовите метод total_seconds() timedelta. Смотрите ниже различия

import arrow

first = arrow.get('2019-03-06 02:00:00')
second = arrow.get('2019-03-05 01:00:00')
d0 = first - second
d1 = d0.days
d2 = d0.seconds
d3 = d0.total_seconds()
print('total days: {}'.format(d1))
print('seconds within day: {}'.format(d2))
print('total seconds: {}'.format(d3))

# total days: 1
# seconds within day: 3600
# total seconds: 90000.0

Документация для даты и времени

.seconds количество секунд в течение дня

.total_seconds() это вся timedelta, преобразованная в секунды

Например:

first = arrow.get('2019-03-06 02:00:00')
second = arrow.get('2019-03-05 01:00:00')

(first - second).seconds
> 3600

(first - second).total_seconds()
> 90000.0

Таким образом, для разницы менее чем в день .seconds & .total_seconds() будет идентичным

Другие вопросы по тегам