Как найти информацию за последние 24 часа - PullRequest
2 голосов
/ 08 марта 2011

Я новичок в программировании, и я хочу найти самый простой способ сделать это.У меня есть информация, в которой есть строка, которая показывает, когда она была обновлена ​​в 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 ]

2 голосов
/ 08 марта 2011

Глядя на данные, предоставляемые 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() хочет часовой пояс, поэтому вы должны удалить -3 из вашего findQuakeTime() кода.

0 голосов
/ 08 марта 2011

Существует два возможных подхода:

  • Преобразуйте каждую строку в вашей информации в ваше местное время и сравните с текущим временем.

  • Получить текущее время в UTC и сравнить с метаданными в вашей информации. На мой взгляд, это решение более чистое, и оно будет работать лучше при отображении нескольких элементов, поскольку необходима только одна конверсия.

Если вы не предоставите больше информации о своем языке программирования, платформе и любых используемых вами платформах, более подробные справки предоставить невозможно.

EDIT:

Теперь, когда мы знаем, что вы используете Python (и вы должны также упомянуть, что это Python-3, а не текущая стабильная версия), и, поскольку ваша переменная quakeTime, кажется, имеет вид Tuesday, March 7, 2011 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
...