我有一个strptime的约会,我想表现为'X小时前'。我可以愉快地将时间转换为数天和数周等,但我不知道如何进行初始总和。以下是我将字符串转换为strptime的方法:
time.strptime(obj.created_at, '%a %b %d %H:%M:%S +0000 %Y')
P.S。找出为什么它不会将%z用于'+0000'的奖励积分 - 我对这是什么感到完全错误?
答案 0 :(得分:3)
答案 1 :(得分:2)
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”字符串中该位置的那些文字字符(通常在那里你有一个时区偏移说明符)。如果那确实是你想要的,那么你有正确的格式字符串!
答案 2 :(得分:0)
您可以使用日期时间吗? (或者将你拥有的任何东西转换成日期时间?)
>>> import datetime
>>> created_at = datetime.datetime(2009,10,15, 13)
>>> now = datetime.datetime.now()
>>> delta = now - created_at
>>> hours_ago = '%d Hours Ago' % (delta.seconds/60/60)
>>> hours_ago
'5 Hours Ago'