source

Ruby/Rails: 날짜를 UNIX 타임스탬프로 변환

ittop 2023. 6. 1. 22:54
반응형

Ruby/Rails: 날짜를 UNIX 타임스탬프로 변환

Rails 앱의 Date 개체에서 UNIX 타임스탬프(1970 GMT 이후의 초 수)를 가져오려면 어떻게 해야 합니까?

알고있어요Time#to_i타임스탬프를 반환하지만 실행Date#to_time그런 다음 타임스탬프를 가져오면 약 한 달 정도 시간이 단축됩니다(이유는 모르겠지만...).

도움을 주시면 감사하겠습니다. 감사합니다!

편집: 좋아요, 제가 그걸 알아낸 것 같아요. 저는 반복해서 여러 번 날짜를 처리하고 있었는데, 매번 시간대 불일치로 인해 날짜가 약간 옮겨졌고, 결국 제 타임스탬프가 한 달이나 빠졌습니다.그럼에도 불구하고, 저는 이것을 의지하지 않고 할 수 있는 방법이 있는지 알고 싶습니다.Date#to_time.

코드date.to_time.to_i잘 작동할 겁니다.아래 레일 콘솔 세션의 예는 다음과 같습니다.

>> 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의 "utc" 방법을 사용하면 됩니다.

사용해 보면 다음과 같은 메시지가 나타납니다.

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

이 두 숫자의 차이는 다음과 같은 사실 때문입니다.Date에는 현재 시간의 시간, 분 또는 초가 저장되지 않습니다.변환 aDate아주Time그날 자정이 될 겁니다

임의의 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"

권장되는 사용 옵션to_utc또는utc로컬 시간 오프셋을 수정할 수 없습니다.나를 위해 찾은 것은 다음과 같습니다.Time.utc()올바르게 작동하고 코드는 더 적은 단계를 수반합니다.

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

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

사용 후 utc를 호출하면 다음과 같이 됩니다.Date....

> 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잘못된 타임스탬프를 제공할 것입니다.

DateTime.new(2012, 1, 15).to_time.to_i

언급URL : https://stackoverflow.com/questions/1805950/ruby-rails-converting-a-date-to-a-unix-timestamp

반응형