如何查找过去24小时的信息
我刚开始学习编程,想找到最简单的方法来做这件事。我有一些信息,其中有一行显示了它最后更新的时间(使用的是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
去掉。