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

#python #python-arrow

#python #python-стрелка

Вопрос:

Я использую 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 на самом деле предоставляет.

Ответ №1:

Свойство seconds отражает разницу между первой и второй датами только в том случае, если они находятся в пределах одного дня. Если дни больше 1 дня, то свойство days увеличивается на единицу, а свойство seconds сбрасывается до нуля. Если вы хотите получить общее количество секунд между ними, то вызовите метод 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
  

Ответ №2:

Документация для datetime

.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 amp; .total_seconds() будет одинаковой.