8

我已经用 RVM 安装了 ruby​​-1.8.6-p383。系统红宝石是 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 中正常工作的建议将不胜感激!

4

3 回答 3

3

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

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

亚莫

于 2010-05-31T08:26:17.020 回答
1

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

你在哪个平台?你在哪个时区(这个例子暗示你在格林威治标准时间)?

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

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

事实证明,Date.today调用 internal Time.now.__send__(:to_date)...,所以也许你应该尝试调用Time.now.__send__(:to_date).to_sirb比较输出以Time.now.to_s缩小问题范围。

Date.today还调用.new_start(...)创建的Date实例,所以也许这会弄乱你的情况。

于 2010-01-28T13:57:43.390 回答
-1

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

于 2010-04-30T19:51:10.643 回答