我知道这是一个坏主意,但我有很多遗留代码,我想要运行一些历史批处理作业。我不想更改系统日期,因为其他东西在同一系统上运行。有没有什么办法可以改变Date.today仅在给定进程的生命周期内返回的值。这里的想法是回放并运行一些旧的批处理脚本,这些脚本用于处理Date.today。
感谢 乔尔
答案 0 :(得分:6)
你可以像Nikolaus给你看的那样修补Ruby,或者可以使用TimeCop gem。它旨在使编写测试更容易,但您也可以在普通代码中使用它。
# Set the time where you want to go.
t = Time.local(2008, 9, 1, 10, 5, 0)
Timecop.freeze(t) do
# Back to the future!
end
# And you're back!
# You can also travel (e.g. time continues to go by)
Timecop.travel(t)
这是一段很棒但很简单的代码。尝试一下,当你自己编写日期和时间时,它会让你感到头疼。
答案 1 :(得分:0)
您可以重新定义Date类的'today'类方法
class Date
def Date.today
return Date.new(2000,1,1)
end
end
这会将Date.today修复为2000-01-01。
答案 2 :(得分:0)
如果重新定义Date.today
似乎过于苛刻,可以尝试delorean
从github页面:
require 'delorean'
# Date.today => Wed Feb 24
Delorean.time_travel_to "1 month ago" # Date.today => Sun Jan 24
Delorean.back_to_the_present # Date.today => Wed Feb 24