루비 / 레일 : 날짜를 UNIX 타임 스탬프로 변환


202

Rails 앱의 Date 객체에서 UNIX 타임 스탬프 (1970 GMT 이후의 초 수)를 어떻게 얻습니까?

나는 Time#to_i타임 스탬프를 반환하지만, 타임 스탬프를 수행 Date#to_time한 다음 약 한 달 정도 지났을 때 결과를 얻습니다 (그 이유는 확실하지 않습니다 ...).

어떤 도움이라도 감사합니다!

편집 : 좋아, 나는 그것을 알아 냈다고 생각한다-나는 루프에서 날짜를 여러 번 처리하고 있었고 시간대 불일치로 인해 날짜가 조금 움직였을 때 궁극적으로 내 타임 스탬프는 한 달이 지났다. 그래도에 의지하지 않고이 작업을 수행 할 수있는 방법이 있는지 알고 싶습니다 Date#to_time.

답변:


350

코드 date.to_time.to_i가 제대로 작동합니다. 아래의 Rails 콘솔 세션은 예제를 보여줍니다 :

>> Date.new(2009,11,26).to_time
=> Thu Nov 26 00:00:00 -0800 2009
>> Date.new(2009,11,26).to_time.to_i
=> 1259222400
>> Time.at(1259222400)
=> Thu Nov 26 00:00:00 -0800 2009

중간 DateTime 객체는 현지 시간이므로 타임 스탬프가 예상 한 시간에서 몇 시간 정도 떨어져있을 수 있습니다. UTC 시간으로 작업하려면 DateTime의 메소드 "to_utc"를 사용할 수 있습니다.


3
DateTime은 다음을 갖지 않습니다to_utc
Green

12
date.to_time.utc아마 그가 의미 한 것입니다.
Adam Eberlin

3
Rails에서 ActiveTime을 통해 DateTime 인스턴스에는 utc () 메소드 (getutc로도 별명)가 있습니다
Gokul

71

시도 할 때 다음을 얻습니다.

>> Date.today.to_time.to_i
=> 1259244000
>> Time.now.to_i
=> 1259275709

이 두 숫자의 차이 Date는 현재 시간의시, 분 또는 초를 저장하지 않기 때문입니다 . 변환 DateA를하는 것은 Time그 날, 자정에 발생합니다.


9

로컬 시간 오프셋 을 사용 to_utc하거나 utc수정하는 제안 된 옵션이 작동하지 않습니다. 나를 위해 사용이 Time.utc()올바르게 작동하고 코드에 적은 단계가 포함되어 있음을 알았습니다 .

> Time.utc(2016, 12, 25).to_i
=> 1482624000 # correct

vs

> Date.new(2016, 12, 25).to_time.utc.to_i
=> 1482584400 # incorrect

Date... 를 사용한 후 utc를 호출하면 어떻게됩니까?

> Date.new(2016, 12, 25).to_time
=> 2016-12-25 00:00:00 +1100 # This will use your system's time offset
> Date.new(2016, 12, 25).to_time.utc
=> 2016-12-24 13:00:00 UTC

... 따라서 명확하게 전화 to_i하면 잘못된 타임 스탬프가 표시됩니다.


8

임의의 DateTime 객체가있는 경우 Ruby 1.8에 대한 솔루션 :

1.8.7-p374 :001 > require 'date'
 => true 
1.8.7-p374 :002 > DateTime.new(2012, 1, 15).strftime('%s')
 => "1326585600"

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.