Как округлить значение времени по часу? - PullRequest
0 голосов
/ 11 марта 2019

Мне нужно вычесть две строки, которые являются представлениями времени, и их округлить на один час.Я пытался использовать метод datetime.replace для total объекта timedelta, и я не могу вызвать этот метод.Как я могу округлить total?

from datetime import datetime, timedelta
start = '23:14'
end = '03:34'
total = datetime.strptime(end,'%H:%M') - datetime.strptime(start, '%H:%M')

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Объект timedelta представляет продолжительность, разницу между двумя датами или временем.class datetime.timedelta ([дни [, секунды [, микросекунды [, миллисекунды [, минуты [, часы [, недели]]]]]]])) Все аргументы являются необязательными и по умолчанию равны 0. Аргументы могут быть целыми, длинными илиплавает и может быть положительным или отрицательным.

Только дни, секунды и микросекунды хранятся внутри.Методы экземпляра: timedelta.total_seconds () Возвращает общее количество секунд, содержащихся в продолжительности, используя это, мы можем вычислить разницу в часах, как показано ниже

from datetime import datetime, timedelta
start = '23:14'
end = '03:34'
total = datetime.strptime(end,'%H:%M') - datetime.strptime(start, '%H:%M')
round((total.total_seconds())/3600)
0 голосов
/ 11 марта 2019

Вам нужно добавить один день, чтобы гарантировать, что он всегда будет работать в будущем.Свойство total.seconds не является общей продолжительностью.Это неправильный ярлык.

from datetime import datetime, timedelta

start = datetime.strptime('23:14','%H:%M')
end = datetime.strptime('03:34', '%H:%M')
print('   start', start)

total = end - start  # wrong

print('1. end  ', end)
print('   total', total)
print('   seconds', total.seconds)
print('   total_seconds', total.total_seconds())

if end < start: # correct
    end += timedelta(days=1)
total = end - start

print('2. end  ', end)
print('   total', total)
print('   seconds', total.seconds)
print('   total_seconds', total.total_seconds())

rounded_up_hours = round((total.total_seconds() + 1800.)/3600.)

print('rounded_up_hours', rounded_up_hours)

Выход:

   start 1900-01-01 23:14:00
1. end   1900-01-01 03:34:00
   total -1 day, 4:20:00
   seconds 15600
   total_seconds -70800.0
2. end   1900-01-02 03:34:00
   total 4:20:00
   seconds 15600
   total_seconds 15600.0
rounded_up_hours 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...