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