2009-11-26 5 views
170

RailsアプリケーションのDateオブジェクトからUNIXタイムスタンプ(1970 GMTからの秒数)を取得するにはどうすればよいですか?Ruby/Rails:日付をUNIXタイムスタンプに変換する

私は、タイムスタンプを返しますが、Date#to_timeを返してからタイムスタンプを取得すると、約1か月は何かの原因となっています。

ご協力いただきありがとうございます。

編集:OK、私はそれを理解したと思います。私はループで何回かの日付を処理していました。タイムゾーンの不一致のために日付が少し動かされるたびに、最終的に私のタイムスタンプは月オフ。それでも、Date#to_timeに依存せずにこれを行う方法があるかどうかを知ることに興味があります。

答えて

295

コードdate.to_time.to_iは正常に動作するはずです。タイムスタンプは、あなたが期待するものからオフに数時間であるかもしれないので、中間DateTimeオブジェクトは、現地時間であることを

>> 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 

注:以下のRailsコンソールセッションは一例を示しています。 UTC時間で作業したい場合は、DateTimeのメソッド "to_utc"を使用できます。

+2

DateTimeには「to_utc」がありません – Green

+10

「date.to_time.utc」はおそらく彼の意図です。 –

+3

Railsでは、ActiveSupportを使用して、DateTimeインスタンスにはutc()メソッド(getutcのエイリアス) – Gokul

59

私はそれをしようとすると、私は次を得る:

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

これらの2つの数の間の差がDateは、現在の時刻の時間、分、秒を格納していないという事実によるものです。 DateTimeに変換すると、その日の深夜になります。ルビー1.8用

7

ソリューションあなたは、任意のDateTimeオブジェクトを持っています。動作しないオフセット現地時刻を修正するto_utcutcを使用しての

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

示唆したオプション。

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

ここ


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

対あなたが Dateを使用した後、UTCを呼び出すときに起こることです....

:私のために私は Time.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は、彼は間違ったタイムスタンプ。

関連する問題