Неправильная дата с рубином Date.today и DateTime.now - PullRequest
7 голосов
/ 28 января 2010

Я установил ruby-1.8.6-p383 с RVM. Системный рубин 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 ]

3 голосов
/ 31 мая 2010

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

http://www.ruby -forum.com / тема / 210647

Ярмо

1 голос
/ 28 января 2010

Возвращенная строка выглядит очень разбитой: 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, так что, возможно, это испортит дату в вашем случае.

0 голосов
/ 30 апреля 2010

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

...