2011-08-20 19 views
6

raylarda yakut tarih terkediyor ve bu göründüğü kadar geçerli:defa karşılaştırılması ya da ben biraz zaman benim veritabanından tanımladığınız

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

Bunda sorun, aynı zamanda bana 2000/01/01 atanan Ben bazı datetime Yani

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

Ben .to_time randevumu hendek olacağını umuyordum yaşananlar şey var, ama bu olur mu

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

şimdi, saat 8: 00'den önce bir şey olup olmadığını karşılaştırmak işe yaramaz. Peki, bunu nasıl karşılaştırabilirim? dog.pocetak ayarını saat olmadan 2000-01-01'e ayarlamanın bir yolu var mı?

Teşekkür ederiz

p.s. Ayrıca, sadece eski değişken saat ve dakikalardan almak için yeni zaman değişkeni yaratmayı düşündüm, ama bu yöntemler işe yaramıyor mu?

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

ama

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

gerçekten sinir bozucu :)

cevap

3
ActiveSupport ile

ve Time.change isterseniz yılı, ayı ve günü sıfırlayabilirsiniz:

> 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 

Eğer aralarında "times" karşılaştırabilirsiniz Bu şekilde, hepsi sıfırlanır olsaydı aynı tarih. Bunun iyi bir çözüm olup olmadığından emin değilsiniz, gerçekten aradığınız şeye bağlıdır.

DÜZENLEME:

Mu'nun öneri gereğince ayrıca time veri türü bir göz sürebilir.

+0

Cevabınız :) – user899119

+0

İkisi [PostgreSQL] (http://www.postgresql.org/docs/9.0/interactive/datatype-datetime için teşekkür ederiz harika. html) ve [MySQL] (http://dev.mysql.com/doc/refman/5.6/en/time.html) 'zaman' veri türlerine sahip, PostgreSQL de bir aralık türü vardır (MySQL'in 'time' çifte görev yapar gün ve aralıklar için).Diğer veritabanlarının da benzer türlere sahip olmasını beklerim (bütünüyle uyumsuz olsa da, standartlar ve tüm bunlar :). –

+0

@mu - Açıklama için teşekkürler mu. Bunu nasıl özledim? Daha fazla uykuya ihtiyacı var. Düzenlenen. – Casper

3

Bir Zaman nesneden dakika almak için, min değil minutes istiyorum. Sadece bir "günün saati" boyutlarında bir süre örneğini (yani hiçbir yıl, ay, ...) sahip olamaz ama düzgün karşılaştıracaktır bir dize sürümü almak için strftime kullanabilirsiniz:

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 

Ya Eğer bireysel hour, min ve sec bileşenlerini karşılaştırabilirsiniz: size yaklaşım

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

özel durumunuza ve başka ne bu çevresinde gidiyor üzerinde, her zamanki gibi, bağlıdır alır.

+0

yardım ettiğini ... Teşekkür ederim :) – user899119

+0

strftime – jschorr

İlgili konular