2010-01-28 2 views
7

RVM과 함께 ruby-1.8.6-p383을 설치했습니다.루비 날짜가 잘못됨 Date.today 및 DateTime.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 

모든 것이 잘 : Time.now가 올바른지 반면 시스템 루비 ... 루비 1.8를 사용할 때이 Date.today 및 DateTime.now에서 잘못된 날짜를 얻고있다 1.9.1_p378-1

입니다 루비 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 

루비 1.8에서 DateTime을 올바르게 사용하는 방법에 대한 조언이 가장 만족 스러울 것입니다!

+0

합니다. – Rob

+0

나를 위해 잘 작동하는 것 같습니다 루비 1.8.6 p287 1.8.6 당신을 위해 요구 사항을 사용하고 있습니까? – Beanish

+0

나는 1.8.6을 필요로하지 않는다. 1.8.7과 함께 작동한다. 그래서이 문제를 해결할 필요가 없다. 그것은 매우 이상하다! 나는 "rvm install 1.8"을 할 때 rvm이 기본값을 설정하기 때문에 1.8.6 만 설치했습니다. – Rob

답변

3

비슷한 문제가 발생하여 3 가지 해결책을 찾았습니다. 두 가지를 시도했는데 두 가지 모두 해결되었습니다. 여기에서 그것에 대해 더 읽기 :

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

Jarmo 내가 루비 1.8.7, 정확한 날짜를 반환 설치 한

+0

예, 문제는 gcc 4.4로 컴파일하는 것이 었습니다. – Rob

1

반환되는 문자열은 매우 깨진 것 같다 : ⅰ) 올해는 2126입니다, II), 연도와 달 사이에 두 개의 하이픈있다 및 II) 날 당신에있는 어떤 플랫폼 10618.

입니까? 어떤 시간대를 사용하고 있습니까? (예를 들어 GMT를 사용하고 있음을 의미합니까?)

저는 WinXP를 사용하고 있으며, Ruby 1.8.6-p111은 세 가지 경우 모두 동일한 결과를 제공합니다.

편집 : Ruby 소스 코드 (DateDateTimelib/date.rb에 정의 됨)에서 파고 들었습니다.

이 내부적으로 Time.now.__send__(:to_date)...Date.today 통화, 어쩌면 당신이 irb에서 Time.now.__send__(:to_date).to_s를 호출 시도하고 문제를 좁히기 위해 Time.now.to_s 출력을 비교해야한다고 밝혀졌습니다.

Date.todayDate 인스턴스에서 .new_start(...)을 호출하므로 날짜가 엉망입니다.

+0

리눅스 x86_64에서 사용하고 있습니다 ... 나는 그리니치 표준시입니다. – Rob

-1

로컬에서 실행 중이거나 서버에서 실행 중인지 확실하지 않지만 루비가 서버 날짜를 사용하고있는 것으로 생각됩니다. 서버 날짜가 다른 시간대 일 수 있으며 따라서 다르게 나타납니다.