我在 strptime 中有一个日期,我想显示为“X 小时前”。我可以愉快地将小时数转换为天数和周数等,但我不知道如何计算初始总和。这是我将字符串转换为 strptime 的方法:
time.strptime(obj.created_at, '%a %b %d %H:%M:%S +0000 %Y')
ps 加分用于弄清楚为什么 '+0000' 不需要 %z - 我完全错了这是什么?
模块肯定更容易使用datetime
,但是,如果你坚持,你可以用time
模块来代替。IE:
>>> 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' forstrptime
意味着您期望并忽略“createdat”字符串中该位置的那些文字字符(通常您在那里有一个时区偏移说明符)。如果这确实是您想要的,那么您就有了正确的格式字符串!
你可以改用日期时间吗?(或者将您拥有的任何内容转换为日期时间?)
>>> 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'