ruby Date.today和DateTime.now的错误日期

时间:2010-01-28 12:01:25

标签: ruby datetime date rvm

我已经用RVM安装了ruby-1.8.6-p383。系统ruby是1.9.1_p378-1

使用ruby 1.8时,我从Date.today和DateTime.now得到了错误的日期..而Time.now是正确的:

irb(main):002:0> DateTime.now.to_s
=> "2126--1-10618T11:23:43+00:00"
irb(main):004:0> Date.today.to_s
=> "2126--1-10618"
irb(main):005:0> Time.now
=> Thu Jan 28 11:55:27 +0000 2010

如果我切换到ruby 1.9,一切都很好:

irb(main):003:0> DateTime.now.to_s
=> "2010-01-28T11:58:51+00:00"
irb(main):004:0> Date.today.to_s
=> "2010-01-28"
irb(main):005:0> Time.now
=> 2010-01-28 11:59:05 +0000

有关如何让DateTime在ruby 1.8中正常工作的任何建议都会非常感激!

3 个答案:

答案 0 :(得分:3)

我偶然发现了类似的问题,并得到了3个不同的解决方案,我尝试了2个并且都工作了。从这里了解更多信息:

http://www.ruby-forum.com/topic/210647

亚尔莫

答案 1 :(得分:1)

返回的字符串似乎非常破碎:i)年份是2126年,ii)年份和月份之间有两个连字符,ii)当天是10618.

你在哪个平台上?你在哪个时区(这个例子暗示你在GMT)?

我使用的是WinXP,Ruby 1.8.6-p111在所有三种情况下都给出了相同的结果。

编辑:我在Ruby源代码中进行了一些挖掘(DateDateTime中定义了lib/date.rb

事实证明,Date.today在内部调用了Time.now.__send__(:to_date)...,因此您可以尝试在Time.now.__send__(:to_date).to_s中调用irb并将输出与Time.now.to_s进行比较,以便缩小问题范围。

Date.today也会在创建的.new_start(...)个实例上调用Date,所以可能会在你的情况下弄乱日期。

答案 2 :(得分:-1)

我不确定你是在本地运行还是在服务器上运行,但我认为ruby可能会占用服务器日期,这可能与你的时区不同,因此看起来不同。