2011-08-20 6 views
6

にRubyで日付を捨てる:は、私は私のデータベースから定義されたいくつかの時間を持っており、これは、それがどのように見えるかで時間を比較すると、またはレール

ruby-1.9.2-p290 :017 > djel.smjena.pocetak1.to_time 
=> 2000-01-01 08:00:00 +0100 

、それは大丈夫です、それは私にも、2000年1月1日 を割り当て私は、だから私は.to_timeが私の日付を捨てるだろうと、期待していたが、それは が

ruby-1.9.2-p290 :020 > dog.pocetak.to_time 
=> Thu, 25 Aug 2011 08:18:00 UTC +00:00 
を発生しませんいくつかの日時に

ruby-1.9.2-p290 :019 > dog.pocetak 
=> Thu, 25 Aug 2011 08:18:00 UTC +00:00 

が起こった何かを得ました

だから、今は8時前に起こったことが無駄だと比較する。 それでは、どのように比較できますか? dog時計を使わずにdog.pocetakを 2000-01-01に設定する方法はありますか?

ありがとう

p.s.また、私は新しい変数を作成することを考えましたが、これは古い可変時間と分からしか得られませんでしたが、このメソッドは機能しませんでしたか?

ruby-1.9.2-p290 :059 > dog.pocetak.hour 
=> 8 

しかし

ruby-1.9.2-p290 :060 > dog.pocetak.minute 
NoMethodError: undefined method `minute' for 2011-08-25 08:18:00 UTC:Time 
     from /home/dorijan/.rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.0.10/lib/active_support/time_with_zone.rb:322:in `method_missing' 
     from (irb):60 
     from /home/dorijan/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.10/lib/rails/commands/console.rb:44:in `start' 
     from /home/dorijan/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.10/lib/rails/commands/console.rb:8:in `start' 
     from /home/dorijan/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.10/lib/rails/commands.rb:23:in `<top (required)>' 
     from script/rails:6:in `require' 
     from script/rails:6:in `<main>' 
ruby-1.9.2-p290 :061 > dog.pocetak.minutes 
NoMethodError: undefined method `minutes' for 2011-08-25 08:18:00 UTC:Time 
     from /home/dorijan/.rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.0.10/lib/active_support/time_with_zone.rb:322:in `method_missing' 
     from (irb):61 
     from /home/dorijan/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.10/lib/rails/commands/console.rb:44:in `start' 
     from /home/dorijan/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.10/lib/rails/commands/console.rb:8:in `start' 
     from /home/dorijan/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.10/lib/rails/commands.rb:23:in `<top (required)>' 
     from script/rails:6:in `require' 
     from script/rails:6:in `<main>' 

本当にイライラ:)

答えて

3
ActiveSupport

Time.changeあなたが好きならば、あなたが年、月、日をリセットすることができます。

> t = Time.now 
=> Sun Aug 21 00:46:29 +0000 2011 
> t.change(:month => 1, :day => 1, :year => 2000) 
=> Sat Jan 01 00:46:29 +0000 2000 

あなたは互いの間で「時間」を比較することができ、このように、彼らはすべてがにリセットされた場合同じ日付。しかし、これが良い解決策であるかどうかは確かで、あなたが本当に探しているものに依存します。

EDIT

ムーの提案を1として、あなたはまた、timeデータ型を見てみることができます。

+0

です:) – user899119

+0

を両方とも[PostgreSQLの](http://www.postgresql.org/docs/9.0/interactive/datatype-datetimeを。 html)と[MySQL](http://dev.mysql.com/doc/refman/5.6/en/time.html)には 'time'データ型がありますが、PostgreSQLにも間隔型があります(MySQLの' time'は二重課されます時間と間隔の時間)。私は他のデータベースが類似したタイプを持っていると期待します。 –

+0

@mu - 清算muのためにありがとう。どのように私はそれを見逃していた..ああ。もっと睡眠が必要。編集されました。 – Casper

3

Timeオブジェクトから分を取得するには、minないminutesをしたいです。あなただけの「一日の時間」(すなわちノー年、月、...)ですが、あなたが適切に比較する文字列のバージョンを取得するstrftimeを使用することができますタイムインスタンスを持つことはできません。

tod = Time.now.strftime('%H:%M:%S') 
# "17:07:23" 

if(t1.strftime('%H:%M:%S') == t2.strftime('%H:%M:%S')) 
    # Same time of day (to one second resolution) 
end 

しますか、あなたは、個々のhourmin、およびsecコンポーネントを比較することができます:あなたに近づく

if(t1.hour == t2.hour && t1.min == t2.min && t1.sec == t2.sec) 
    # Same time of day (to one second resolution) 
end 

は、特定の状況や他に何その近くにで起こっている上、いつものように、依存取ります。

+0

strftimeのは素晴らしい – user899119

+0

を助けたこと...ありがとうあなたの答えをありがとう:) – jschorr

関連する問題