2011-01-27 6 views
2

나는 코드MongoMapper & Ruby/Rails에서 날짜를 UTC로 변환하는 방법?

self.auth_history.push [start_date, self.coupon_code] 

이 라인을 추가 그리고이 오류 메시지

Date is not currently supported; use a UTC Time instance instead. 

나는 또한 start_date.utc 시도를 얻었으나, 그 중 하나가 작동하지 않았다.

도와주세요. 감사. 난 당신이 만드는 가정합니다 그래서 MongoMapper의 핵심으로 코드에 정의 된 시작일을 보지 못했다

===, -

+0

시도 Time.new (시작일), 시작일은 어디에서 왔습니까? 방법이야? – andrea

+0

Date에서 UTC Time으로 start_date를 변환하는 것을 포기했습니다. start_date (a Date)를 start_date.to_s를 사용하여 문자열로 저장하려고합니다. – Mei

답변

7

나는 시애틀 여단 그룹에서이 대답을 얻었다 Ruby를 통해 직접 또는 Rails로 래핑 된 자신의 날짜 객체. 내가 아는 한, 누군가 나를 교정 해주세요. Mongo 은 신기원 이후의 시간을 밀리 세컨드 단위로 UTC 시간으로 저장합니다. 따라서 키를 MongoMapper에서 : date 매핑과 함께 정의하면, Ruby에 Time 객체가 래핑됩니다.

따라서 MongoMapper가 만든 이 아니므로 Mongo 내부에 날짜를 저장하려면 UTC로 Time 개체를 만들어야합니다. MongoMapper에는 사용할 수있는 to_mongo라는 Date 믹스 인 메서드가 있습니다.

>> Time.now.utc 
=> Fri Jan 28 03:47:50 UTC 2011 
>> require 'date' 
=> true 
>> date = Date.today 
=> #<Date: 4911179/2,0,2299161> 
>> Time.utc(date.year, date.month, date.day) 
=> Thu Jan 27 00:00:00 UTC 2011 
>> require 'rubygems' 
=> true 
>> require 'mongo_mapper' 
=> true 
>> Date.to_mongo(date) 
=> Thu Jan 27 00:00:00 UTC 2011 

시간 변경을 조심하십시오.

>> Date.to_mongo(Time.now) 
=> Thu Jan 27 00:00:00 UTC 2011 
>> Date.to_mongo(Time.now.utc) 
=> Fri Jan 28 00:00:00 UTC 2011 

행운을 빈다.

그리고 그것은 나를 위해 작동

Date.to_mongo(start_date) 

를 사용하여 ===

.

-2

EfratBlaier의 의견에 따라 답변을 업데이트했습니다.

Date.today.to_time.utc

+0

해당 메소드는 to_date_time이 아닌 to_datetime입니다. –

+0

정답은 Date.today.to_time.utc – EfratBlaier

+1

입니다. 일반적으로 날짜는 UTC로 지정되기 때문에 잘못 될 수 있습니다. 그러면 먼저 자정 현지 시간으로 변환 된 다음 UTC로 그 시간을 알려줍니다. – Amala

0

첫째, 나는 질문 제목 설명 나쁜 생각합니다. 사실, 다른 시간대의 차이점은 Time on on Date입니다. 따라서 날짜를 UTC 형식으로 변환하고 싶다고 말하는 것은 적절하지 않습니다.

DateTime.now.new_offset(0) 
-1

가 여기에 또 다른 옵션들 : 여기

Time.at(Date.today.to_datetime.to_i).utc 

내가 임의의 예를 날짜로 Date.today을 사용하고 여기에

은 UTC 형식으로 날짜 시간을 변환하는 루비의 또 다른 방법입니다. 변환하려는 날짜로 바꾸십시오. Time 인스턴스로 변환 된 후에는 Time이 지원되는 기본 유형이기 때문에 BSON으로 직렬화 할 수 있습니다. 즉, MongoMapper를 사용하여 데이터베이스에 저장할 수 있습니다.

+0

이 질문에 대한 답변을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. – Nullify

+0

내 코드를 완전히 변경 한 편집 결과를 롤백했습니다. 즉, Time 인스턴스가 아닌 DateTime을 반환하는 코드가 작성되었습니다.이 순수한 루비 솔루션이 MongoMapper와 어떻게 관련되는지에 대한 설명도 추가되었습니다. –

관련 문제