Я установил ruby-1.8.6-p383 с RVM. Системный рубин является 1.9.1_p378-1
Я получаю неправильную дату от 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
Все хорошо, если я переключаюсь на рубиновые 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 работать правильно в рубиновых 1.8, больше всего ценился бы!
Я наткнулся на похожую проблему и получил 3 разных решения, из которых я попробовал два, и оба сработали. Подробнее об этом можно прочитать здесь:
http://www.ruby-forum.com/topic/210647
Jarmo
Возвращаемая строка, кажется, очень разбита: i) год - 2126, ii) между годом и месяцем два дефиса, и ii) день - 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
, так что, возможно, это путает дату в вашем случае.
Я не уверен, запускаете ли вы что-то локально или на сервере, но я думаю, что ruby может принимать дату сервера, которая может находиться в другом часовом поясе, чем вы, и, таким образом, выглядеть по-другому.