Ruby 1.9.2与Ruby 1.8.7中不同的时间格式引起问题

3
我正在将现有的Ruby on Rails应用程序中使用的Ruby版本从1.8.7升级到1.9.2,该应用程序广泛使用与时间相关的计算。但是在切换到ruby 1.9.2 -p290后,它无法正常工作。我猜测问题出在

上。
$ rvm use 1.8.7

ruby-1.8.7-p334 :001 > Time.now
=> Thu May 12 12:42:35 +0200 2011 

$ rvm use 1.9.2

ruby-1.9.2-p180 :001 > Time.now
=> 2011-05-12 12:42:44 +0200 

请问如何解决这种问题,或者如何更改或覆盖默认的 Ruby 1.9.2 格式回到旧格式,又或者如何解决较新版本的 Ruby 中与时间相关的变化。

谢谢!

1个回答

2

你可以使用

Time.now.asctime

在1.9版本中

编辑1:

好的,这取决于你如何使用它。这应该对你有用:

irb(main):001:0> class Time
irb(main):002:1> class << self
irb(main):003:2>   alias :orig_now :now
irb(main):004:2>
irb(main):005:2*   def now
irb(main):006:3>     orig_now.asctime
irb(main):007:3>   end
irb(main):008:2> end
irb(main):009:1> end
=> nil
irb(main):010:0> Time.now
=> "Thu Jul 28 12:29:08 2011"  # STRING
irb(main):011:0>

编辑2:

好的,我有点误解了你的问题。上面的补丁将导致Time.now返回字符串(而不是Time对象)。

如果你只想看到不同表示的Time对象,可以应用以下方法:

irb(main):011:0> class Time
irb(main):012:1>
irb(main):013:1* def inspect
irb(main):014:2>   self.asctime
irb(main):015:2> end
irb(main):016:1> end
=> nil
irb(main):017:0> Time.now
=> Thu Jul 28 13:41:16 2011   # TIME

谢谢您的回复,但是我不想在每个位置更改计算,是否有一种方法可以通过初始化程序来覆盖时间格式,就像覆盖默认格式或更改默认格式一样。 - Nishant
那么我应该创建一个初始化文件,其中包含您提到的代码,而无需在每个位置进行更改。对吗? - Nishant
好的,感谢Vlad Khomich抽出时间来。让我尝试创建一个初始化文件,然后放入你给的类,再尝试运行代码。 - Nishant
Time.now目前显示的格式正确,但是它给我显示了这个错误,undefined method strftime' for "Thu Jul 28 09:59:42 2011":String。 我所做的是 Time.now.to_time.strftime("%m"),但在服务器启动时会出现错误... .rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/log.rb:83:in log': undefined method `strftime' for "Thu Jul 28 10:06:49 2011":String (NoMethodError)。 - Nishant
(对象不支持#inspect)这是在我的Rails控制台中尝试时显示给我的内容。 - Nishant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接