我正在尝试将“Sep 11, Oct 31, Feb 28”之类的字符串转换为 DateTime 实例,作为屏幕抓取工具的一部分。使用 DateTime.parse() 可以正常工作,除了数据跨越年份,而且它天真地(并且可能正确地)返回当前年份的日期。
例如下面的测试用例。
test "dateA convert next year" do
TimeService.stubs(:now).returns(Time.new(2013, 12, 30, 9, 30))
assert_equal(Date.new(2014, 1, 2), Extraction.dateA("Jan 2"))
end
我更新了我的方法以查看年份 + 1 的日期,并返回最接近“现在”的日期 - 这很好用。但是感觉有点难看,我正在寻找一个更优雅的解决方案。
def Extraction.dateA(content)
return_value = DateTime.parse(content)
next_year = return_value.change(:year => return_value.year + 1)
now = TimeService.now.to_i
if (next_year.to_i - now).abs < (return_value.to_i - now).abs then
return_value = next_year
end
return_value
end
- TimeService.now 只是一个返回当前时间以帮助存根的实用程序。
- 对不起,我的红宝石,我是新手。