如何检查字符串是否包含特定格式的今天日期

时间:2011-05-02 20:37:28

标签: ruby string rss

我正在解析一些汇总某个城市正在发生的事情的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

当然通过检查标题(我知道的事件包含以下格式的事件日期:“(4月2日)”)包含日期和月份(例如'2'和'May')I获取有关5月12日,5月20日发生的事件的信息,等等。我怎样才能让它变得万无一失,只能得到今天的活动?

以下是一个样本标题:“Diggin Deeper @ The Big Chill House(5月12日)”

2 个答案:

答案 0 :(得分:1)

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创建一个字符串,该字符串与标题中显示的日期完全匹配,然后只使用字符串#include?与该字符串,但我不认为有一种优雅的方式放置当天的'th'/'nd'/'rd'/等。)

答案 1 :(得分:0)

使用类似的东西:

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!