1

「X時間前」として表示したいstrptimeの日付があります。時間を日や週などに喜んで変換できますが、最初の合計を計算する方法がわかりません。文字列を strptime に変換する方法は次のとおりです。

time.strptime(obj.created_at, '%a %b %d %H:%M:%S +0000 %Y')

「+0000」に %z がかからない理由を理解するための ps ボーナス ポイント - これが何であるかについて完全に間違っていますか?

4

3 に答える 3

4

timesinceDjango の は変換せずにあなたを助けることができるようです。のソースはこちらからtimesince入手できます。

于 2009-10-15T09:38:51.690 に答える
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このモジュールを使用するのが非常に厄介な理由の1 つは、時間を表すために 2 つの異なる方法を使用していることですstrptime。何をする必要があるかの違い); mktime関数は前者を後者に変換します。時間の差は、秒の差の 1/3600 であることは明らかです。もちろん、通常は分数の「時間前の数」を表示する方法を決定する必要があります (時間と数桁の分数、または最も近い値に丸めます)。整数の時間数、またはその他)。

形式のリテラル '+0000' forstrptimeは、「createdat」文字列のその場所にあるリテラル文字を期待して無視することを意味します (通常、そこにはタイムゾーン オフセット指定子があります)。それが本当にあなたが望むものなら、あなたは正しいフォーマット文字列を持っています!

于 2009-10-15T15:01:37.680 に答える
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'
于 2009-10-15T10:01:02.623 に答える