3

RSS フィードを次のように反復します。_file はフィードです。

d = feedparser.parse(_file)
for element in d.entries: 
    print repr(element.date)

日付出力は次のようになります

u'Thu, 16 Jul 2009 15:18:22 EDT'

上記の日付出力を実際に定量化する方法を理解できないように見えるので、それを使用してフィード要素を制限できます。私が求めているのは、これから実際の時間をどのように取得できるかということです.7日以上経過している場合は、この要素をスキップすると言えます.

4

3 に答える 3

5

feedparser は、Python の time モジュールから struct_time オブジェクトを提供することになっています。その日付形式を認識しないため、生の文字列が返されると思います。

不正な形式のタイムスタンプを解析するためのサポートを追加する方法については、こちらを参照してください。

http://pythonhosted.org/feedparser/date-parsing.html

struct_time を取得することができた場合は、ここで詳細を読むことができます。

http://docs.python.org/library/time.html#time.struct_time

struct_time オブジェクトには、必要なものがすべて含まれています。次のメンバーがいます。

time.struct_time(tm_year=2010, tm_mon=2, tm_mday=4, tm_hour=23, tm_min=44, tm_sec=19, tm_wday=3, tm_yday=35, tm_isdst=0)

私は通常、次のように構造体を秒に変換します。

import time
import calendar

struct = time.localtime()
seconds = calendar.timegm(struct)

次に、通常の計算を行って経過秒数を確認するか、datetime モジュールを使用して timedeltas を実行できます。

于 2010-02-05T04:51:18.553 に答える
1

一方通行

>>> import time
>>> t=time.strptime("Thu, 16 Jul 2009 15:18:22 EDT","%a, %d %b %Y %H:%M:%S %Z")
>>> sevendays=86400*7
>>> current=time.strftime ("%s",time.localtime())
>>> if int(current) - time.mktime(t) > sevendays:
        print "more than 7 days"

また、 datetimeモジュールを参照して、日付の計算に timedelta() を使用することもできます。

于 2010-02-05T03:56:17.087 に答える
0

dateutilモジュールをインストールする場合:

import dateutil.parser as dp
import dateutil.tz as dtz
import datetime

date_string=u'Thu, 16 Jul 2009 15:18:22 EDT'
adatetime=dp.parse(date_string)
print(adatetime) 
# 2009-07-16 15:18:22-04:00

now=datetime.datetime.now(dtz.tzlocal())
print(now)
# 2010-02-04 23:35:52.428766-05:00

aweekago=now-datetime.timedelta(days=7)
print(aweekago)
# 2010-01-28 23:35:52.428766-05:00

if adatetime<aweekago:
    print('old news')

Ubuntuを使用している場合は、パッケージdateutilによって提供されます。python-dateutil

于 2010-02-05T04:41:50.503 に答える