6

I have some time defined from my database, and this is how it looks:

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

and that is ok, it assigned me 2000-1-1 also, I got something that happened in some datetime

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

So I was hoping, that .to_time would ditch my date, but that does not happen

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

so, now, comparing if something happened before 8:00 is useless. So, how can I compare that? is there a way to set dog.pocetak to 2000-01-01 without touch clock?

thank you

p.s. also, I thought of creating new time variable, only to get from old variable hours and minutes, but this methods dont work?

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

but

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

really frustrating :)

2 Answers 2

3

With ActiveSupport and Time.change you can reset the year, month and day if you like:

> 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 

This way you could compare the "times" between each other, if they all were reset to the same date. Not sure if this is a good solution though, depends on what you really are looking for.

EDIT:

As per mu's suggestion you could also take a look at the time data type.

Sign up to request clarification or add additional context in comments.

2 Comments

Both PostgreSQL and MySQL have time data types, PostgreSQL also has an interval type (MySQL's time does double duty for time of day and intervals). I would expect other databases to have similar types (all subtly incompatible though, standards and all that :).
@mu - Thanks for the clarification mu. How did I miss that..uh. Need more sleep. Edited.
3

To get the minutes from a Time object, you want min not minutes. You can't have a Time instance that's just a "time of day" (i.e. no year, month, ...) but you can use strftime to get a string version that will compare properly:

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 

Or you could compare the individual hour, min, and sec components:

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

Which approach you take depends, as usual, on your specific situation and what else is going in in that vicinity.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.