如何查找过去24小时的信息

2 投票
2 回答
2537 浏览
提问于 2025-04-16 13:16

我刚开始学习编程,想找到最简单的方法来做这件事。我有一些信息,其中有一行显示了它最后更新的时间(使用的是UTC时间)。现在我想写一个程序,问一下这些信息是否是在过去24小时内更新的,如果是的话,就打印出这些信息。我正在使用Python 3,感谢大家的帮助。

import datetime
import urllib.request
def findEarthquake(entry):
    start= entry.find("<titile>") +7
    end= entry.find("</title>")
    eq= entry[start:end]
    return eq
def findQuakeTime(entry):
    start= entry.find("<p>") +3
    end= entry.find("<br>") -3
    time=entry[start:end]
    return time 
page= urllib.request.urlopen("http://earthquake.usgs.gov/eqcenter/catalogs/7day-M2.5.xml")
text= page.read().decode("utf8")
start= text.find("<entry>") +7
earthquakeList=[]

while start >= 0:
    end= text.find("</entry>", start)
    entry= text[start:end]
    quake= findEarthquake(entry)
    quakeTime= findQuakeTime(entry)

2 个回答

0

有两种可能的方法:

  • 把你信息中的每一行时间转换成你所在的本地时间,然后和当前时间进行比较。

  • 获取当前的UTC时间,然后和你信息中的时间进行比较。在我看来,这种方法更简洁,而且在显示多个项目时性能更好,因为只需要进行一次转换。

除非你提供更多关于你使用的编程语言、平台和框架的信息,否则很难给出更详细的帮助。

编辑:

现在我们知道你在使用Python(你应该还提到是Python-3,而不是当前的稳定版本),而且你的quakeTime变量似乎是这样的格式2011年3月7日 星期二 15:52:08,下面是一个小脚本,用来测试给定的日期是否在过去24小时内:

import calendar
import sys
import time

def withinLast24Hours(d):
        current = time.time();

        limit = current - 24 * 3600;

        argument = calendar.timegm(time.strptime(d, '%A, %B %d, %Y %H:%M:%S'))

        if (argument > limit):
                return True
        else:
                return False

print(withinLast24Hours(sys.argv[1]))

还有几个使用案例:

$ date -u
Tue Mar  8 17:56:42 UTC 2011
$ python3 timetest.py 'Tuesday, March  7, 2011 17:56:08'
False
$ python3 timetest.py 'Tuesday, March  7, 2011 17:57:08'
True
2

根据美国地质调查局(USGS)提供的数据,似乎他们已经把这些信息给你了。比如,在第一个条目中,我看到有 <category label="Age" term="Past day"/>,而最后一个条目是 <category label="Age" term="Past week"/>

如果你相信这些信息,你可以像提取标题和时间那样提取这些数据:

def findQuakeAge(entry):
    start = entry.find('<category label="Age" term="') + 28
    end = entry.find('"/>', start)
    age = entry[start:end]
    return age

然后你可以根据年龄是否是 "Past day" 来过滤你的数据。

更新: 这里是如何手动检查日期的方法。

from datetime import datetime, timedelta

quakeTime = datetime.strptime(quakeTime, "%A, %B %d, %Y %H:%M:%S %Z")

if datetime.now() - quakeTime < timedelta(days=1):
    # quake was less than a day ago

注意,strptime() 需要时区,所以你应该把你的 findQuakeTime() 代码中的 -3 去掉。

撰写回答