Как узнать количество секунд между двумя датами со стрелкой?
Я использую 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()
будет идентичным