Как проверить, содержит ли строка сегодняшнюю дату в определенном формате - PullRequest
0 голосов
/ 03 мая 2011

Я разбираю некоторые RSS-каналы, которые агрегируют то, что происходит в данном городе. Меня интересует только то, что происходит сегодня.

На данный момент у меня есть это:

require 'rubygems'
require 'rss/1.0'
require 'rss/2.0'
require 'open-uri'
require 'shorturl'

source = "http://rss.feed.com/example.xml"
content = ""
open(source) do |s| content = s.read end
rss = RSS::Parser.parse(content, false)

t = Time.now
day = t.day.to_s
month = t.strftime("%b")

rss.items.each do |rss|
  if "#{rss.title}".include?(day)&&(month)
    # does stuff with it
  end
end

Конечно, проверяя, содержит ли заголовок (который я знаю, дату события в следующем формате: «(2 апреля 11)») день и месяц (например, «2» и «май») I получить также информацию о событиях, которые происходят 12 мая, 20 мая и так далее. Как я могу сделать его надежным и получать только сегодняшние события?

Вот пример заголовка: "Diggin Deeper @ The Big Chill House (12 мая 11)"

Ответы [ 2 ]

1 голос
/ 03 мая 2011
today = Time.now.strftime("%d:%b:%y")
if date_string =~ /(\d*).. (.*?) (\d\d)/
  article_date = sprintf("%02i:%s:%s", $1.to_i, $2, $3)
  if today == article_date
    #this is today
  else
    #this is not today
  end
else
  raise("No date found in title.")
end

Возможны проблемы, если заголовок содержит другие цифры. Есть ли в заголовке какие-либо ограничивающие символы вокруг даты, такие как дефис перед датой или квадратные скобки вокруг нее? Добавление их в регулярное выражение может предотвратить проблемы. Не могли бы вы дать нам пример названия? (В качестве альтернативы можно использовать Time # strftime для создания строки, которая будет идеально соответствовать дате, как она появляется в заголовке, а затем просто использовать String # include? С этой строкой, но я не думаю, что есть элегантный способ поставить 'th' / 'nd' / 'rd' / etc в день.)

0 голосов
/ 03 мая 2011

Используйте что-то вроде этого:

def check_day(date)
  t = Time.now
  day = t.day.to_s
  month = t.strftime("%b")

  if date =~ /^#{day}nd\s#{month}\s11/
    puts "today!"
  else
    puts "not today!"
  end
end

check_day "3nd May 11" #=> today!
check_day "13nd May 11" #=> not today!
check_day "30nd May 11" #=> not today!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...