2016-02-06 3 views
3

Я пытаюсь преобразовать два «длительности», однако я в настоящее время, получающий TypeError из-за один будучи datetime.timedelta и один будучи datetime.time:Преобразование datetime.time в datetime.timedelta в Python 3.4

TypeError: unorderable types: datetime.time() <= datetime.timedelta() 

Что такое эффективный способ преобразования datetime.time в datetime.timedelta?

Я проверил docs и нет встроенного метода преобразования между этими двумя типами.

ответ

10

datetime.time()не является длительностью, это точка в день. Если вы хотите, чтобы интерпретировать его как продолжительность, а затем преобразовать его в период с полуночи:

datetime.combine(date.min, timeobj) - datetime.min 

Демо:

>>> from datetime import datetime, date, time 
>>> timeobj = time(12, 45) 
>>> datetime.combine(date.min, timeobj) - datetime.min 
datetime.timedelta(0, 45900) 

Вы, возможно, потребуется изучить, как вы получите datetime.time() объект в первую очередь хотя, возможно, есть более короткий путь к timedelta() из входных данных, которые у вас есть? Не используйте, например, datetime.time.strptime().

+0

Спасибо за ваш ответ, хотя я осознал, что это не длительность, поэтому я поместил его в кавычки в вопросе. Это работает, спасибо! –

+0

@ R.Murray: такая же идея, но проще: 'diff = datetime.combine (datetime.min, timeobj) - datetime.min' – jfs

+0

@JFSebastian: отличная идея, я просто научусь^Wborrow, что с небольшой коррекцией ('date.min', а при объединении) :-) –

1

Вот один файлик, хотя это не обязательно эффективно:

import datetime 
x = datetime.timedelta(hours=x.hour, minutes=x.minute, seconds=x.second, microseconds=x.microsecond) 

Где x является datetime.time объект.

Смежные вопросы