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

标签 ruby-on-rails ruby date

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

谢谢 乔尔

最佳答案

您可以像 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)

这是一段很棒但简单的代码。试一试,当您自己用猴子修补日期和时间时,它会让您省去一些麻烦。

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

关于ruby-on-rails - 如何在正在运行的 ruby​​ 进程中更改 Date.today 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4026360/

相关文章:

javascript - HTML div 标签中的循环表达式与 Javascript 一起使用

ruby-on-rails - rbenv 版本 2.2.1 未安装,即使它是

Python:xlrd 从 float 中识别日期

javascript - momentjs toDate - 不同客户端/浏览器上的不同输出

mysql - 变量中的日期 - mysql

ruby-on-rails - su - $USER -p -c "$CMD"未访问路径

ruby-on-rails - 如何在 Rails 共享主机上执行 restart.txt ruby

ruby-on-rails - 为什么最好将电话号码存储为字符串而不是整数?

ruby - 上传数据库中的图片

ruby - 如何使用 Rugged ruby​​ gem 拉取 git 存储库