2010-01-28 5 views
7

Я установил ruby-1.8.6-p383 с RVM. Система рубин 1.9.1_p378-1Неправильная дата с ruby ​​Date.today и DateTime.now

Я получаю неправильную дату от Date.today и DateTime.Now при использовании рубина 1.8 .. В то время как 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 будет наиболее ценится!

+0

Я установил рубин 1.8.7, который возвращается на правильную дату. – Rob

+0

, похоже, отлично работает для меня ruby ​​1.8.6 p287 использует 1.8.6 для вас? – Beanish

+0

Мне не нужен 1.8.6, он работает с 1.8.7 .. Поэтому мне не нужно это решать .. Это просто очень странно! Я только установил 1.8.6, потому что это то, что по умолчанию делает rvm при выполнении «rvm install 1.8» – Rob

ответ

3

Я наткнулся на аналогичную проблему и получил 3 разных решения, которые я пробовал 2 из них и оба работали. Подробнее об этом читайте здесь:

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

Ярмо

+0

Да, я думаю, что проблема, с которой я столкнулась, связана с компиляцией с gcc 4.4. – Rob

1

Возвращается строка, кажется, очень сломан: я) год составляет 2126, б) есть два дефис между годом и месяцем, и б) днем ​​является 10618.

Какой платформы вы? В какой часовой зоне вы находитесь (пример означает, что вы находитесь в GMT)?

Я нахожусь на WinXP и Ruby 1.8.6-p111, дает одинаковый результат во всех трех случаях.

Редактирование: Я сделал некоторые копания в исходном коде Ruby (Date и DateTime определены в 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, так что, возможно, это испортило дату в вашем случае.

+0

Я использую linux x86_64. Я нахожусь в GMT. – Rob

-1

Я не уверен, что вы работаете на локальном компьютере или на сервере, но я думаю, что Ruby может принимать дату сервера, которая может быть в другом часовом поясе, чем вы, и, следовательно, выглядеть по-другому.

Смежные вопросы