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

我用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个不同的解决方案,我尝试了2个并且都工作了。 从这里阅读更多相关信息:

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

亚尔莫

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

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

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

编辑:我在Ruby源代码中做了一些挖掘( DateDateTime Datelib/date.rb中定义)。

事实certificate, Date.today内部调用Time.now.__send__(:to_date)... ,所以也许你应该尝试在irb调用Time.now.__send__(:to_date).to_s并将输出与Time.now.to_s进行比较Time.now.to_s以缩小问题范围。

Date.today还在创建的Date实例上调用.new_start(...) ,这样可能会弄乱你的日期。

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