如何在正在运行的ruby进程中更改Date.today的值

Joe*_*lio 6 ruby ruby-on-rails date

我知道这是一个坏主意,但我有很多遗留代码,我想要完成一些历史批处理作业.我不想更改系统日期,因为其他东西在同一系统上运行.有没有什么办法可以改变Date.today仅在给定进程的生命周期内返回的值.这里的想法是回放并运行一些旧的批处理脚本,这些脚本用于处理Date.today.

谢谢乔尔

Ari*_*jan 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)
Run Code Online (Sandbox Code Playgroud)

这是一个很棒但很简单的代码.尝试一下,当你自己修改日期和时间时,它会让你感到头疼.

链接:https://rubygems.org/gems/timecop