Неправильная дата с рубиновыми Date.today и DateTime.now
Вопрос
Я установил Ruby-1.8.6-p383 с RVM.Система Ruby — 1.9.1_p378-1.
Я получаю неправильную дату из Date.today и DateTime.now при использовании Ruby 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!
Решение
Я наткнулся на аналогичную проблему и получил 3 разных решения, 2 из которых я попробовал, и оба сработали.Подробнее об этом читайте здесь:
http://www.ruby-forum.com/topic/210647
Ярмо
Другие советы
Возвращенная строка кажется очень сломанной: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 может брать дату сервера, которая может находиться в другом часовом поясе, чем вы, и, следовательно, отображаться по-другому.