Модуль datetime
определенно проще в использовании, но, если вы настаиваете, то вы можете сделать это с time
модуля вместо. То есть:
>>> import time
>>> fmt = '%a %b %d %H:%M:%S +0000 %Y'
>>> time.strftime(fmt)
'Thu Oct 15 07:54:07 +0000 2009'
>>> createdat = 'Thu Oct 15 02:30:30 +0000 2009'
>>> createdtim = time.strptime(createdat, fmt)
>>> hoursago = (time.time() - time.mktime(createdtim))/3600
>>> print hoursago
5.42057559947
Одна из причин time
модуль настолько противный, чтобы использовать то, что он использует два разных способа представления времени - один является 9-кортеж (и это то, что вы получаете от strptime
), и один поплавок «секунд с эпохи» (и это то, что вам нужно делать); функция mktime
переводит первую в последнюю. Разница в часах, очевидно, составляет 1/3600 разницы в секундах - вам нужно будет решить, как отображать типично дробное «количество часов назад», конечно (час и доля с некоторыми цифрами или, округленные до ближайшего целое число часов или что еще).
Литерала «+0000» в вашем формате, для strptime
, означает, что вы ожидаете и игнорируете эти буквенные символы в этом месте в строке «createdat» (обычно у вас есть спецификатор смещения часового пояса). Если это действительно то, что вы хотите, то у вас есть правильная строка формата!
Это должно быть один из наиболее распространенных вопросов на SO. –
Я был бы признателен за указание на пример, на который он был дан ответ в этом случае – chrism
Я думаю, что было намек на то, что вы могли бы искать (вверху страницы) предыдущие подобные вопросы и видеть их ответы. – pavium