Forum: Ruby Time object problems - 1.8.2

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Ea52304f84449ae1a3feabc6d3cd04f9?d=identicon&s=25 Greg Lorriman (Guest)
on 2006-03-15 13:00
(Received via mailing list)
I am trying to efficiently get the date part of a Time object.

To remove the time part of the Time object I subtract the modulo of a
day-in-seconds. But if I do this I get a Time object of the date *plus
1 hour*!!! Perhaps I'm just tired, but I don;t understand why.

ie :

  DAY_IN_SECS=60*60*24;
  t=Time.parse("20-Oct-2005 04:04:00")
  datePart=t-t.to_f.modulo(DAY_IN_SECS);

(and I might apply Time.at to get a Time object rather than a float.)

However, the result of the above is

  20-Oct-2005 01:00:00

instead of

  20-Oct-2005 00:00:00

Anyone got any ideas?

Greg
F1653a5cad4e1859403491de917f8f49?d=identicon&s=25 Bernhard 'elven' Stoeckner (Guest)
on 2006-03-15 13:51
(Received via mailing list)
Greg Lorriman scribbled on Wednesday 15 Mar 2006 12:55:

>   datePart=t-t.to_f.modulo(DAY_IN_SECS);
>
> Anyone got any ideas?
>
> Greg

irb(main):001:0> t = Time.now; t - t.sec - 60 * t.min - 3600 * t.hour
=> Wed Mar 15 00:00:00 CET 2006
93d566cc26b230c553c197c4cd8ac6e4?d=identicon&s=25 Pit Capitain (Guest)
on 2006-03-15 14:11
(Received via mailing list)
Greg Lorriman schrieb:
> (and I might apply Time.at to get a Time object rather than a float.)
>
> However, the result of the above is
>
>   20-Oct-2005 01:00:00
>
> instead of
>
>   20-Oct-2005 00:00:00
>
> Anyone got any ideas?

Greg, look at this:

   p Time.at(0)

It starts at 1 o'clock.

Regards,
Pit
801b207647d808477fc4514568c9d723?d=identicon&s=25 Dimitri Aivaliotis (Guest)
on 2006-03-15 15:05
(Received via mailing list)
Hi Greg,

On 3/15/06, Greg Lorriman <temp@lorriman.com> wrote:
> I am trying to efficiently get the date part of a Time object.

I've just been playing around with Time and Date a bit.  I have to ask:
why?

You can get just the date part much more easily by using a Date object:

Date.parse("20-Oct-2005 04:04:00").to_s
=> "2005-10-20"

If you absolutely need a time object out of it, you can use 'facets':

require 'facet/date/to_time'
Date.parse("20-Oct-2005 04:04:00").to_time
=> Thu Oct 20 00:00:00 CEST 2005

HTH

- Dimitri
Ea52304f84449ae1a3feabc6d3cd04f9?d=identicon&s=25 Greg Lorriman (Guest)
on 2006-03-15 16:35
(Received via mailing list)
>I've just been playing around with Time and Date a bit.  I have to ask: why?

>You can get just the date part much more easily by using a Date object:

Unfortunately the Date class is horrifically slow. I'm already being
hammered by other slow aspects of ruby, which I can't avoid. So Time it
is!
801b207647d808477fc4514568c9d723?d=identicon&s=25 Dimitri Aivaliotis (Guest)
on 2006-03-15 16:57
(Received via mailing list)
On 3/15/06, Greg Lorriman <temp@lorriman.com> wrote:
>
> Unfortunately the Date class is horrifically slow. I'm already being
> hammered by other slow aspects of ruby, which I can't avoid. So Time it
> is!

Indeed.  I just discovered
http://www.recentrambles.com/pragmatic/view/33 from another thread.
Interestingly enough, by replacing DateTime with Date in the example,
the benchmark comes out about 3 times faster.  I guess having to work
with hours, minutes, and seconds is expensive.

- Dimitri
Da914f265213ce31c7d22195ef178d15?d=identicon&s=25 Gordon Thiesfeld (Guest)
on 2006-03-15 17:29
(Received via mailing list)
> irb(main):001:0> t = Time.now; t - t.sec - 60 * t.min - 3600 * t.hour
> => Wed Mar 15 00:00:00 CET 2006

How about:

irb(main):001:0> t = Time.now; Time.local(t.year,t.month,t.day)
=> Wed Mar 15 00:00:00 Central Standard Time 2006
Ea52304f84449ae1a3feabc6d3cd04f9?d=identicon&s=25 Greg Lorriman (Guest)
on 2006-03-15 18:38
(Received via mailing list)
It makes me think that an effort is needed to convert many of the
libraries that do basic heavy-lifting, like DateTime and CSV and
others, to C libraries.

I like the purity of the idea of a "pure Ruby" library, but I am
suffering the consequences and even considering jumping to Python; the
pain is getting to be too much.
Cb48ca5059faf7409a5ab3745a964696?d=identicon&s=25 unknown (Guest)
on 2006-03-15 18:46
(Received via mailing list)
On Thu, 16 Mar 2006, Greg Lorriman wrote:

> It makes me think that an effort is needed to convert many of the
> libraries that do basic heavy-lifting, like DateTime and CSV and
> others, to C libraries.
>
> I like the purity of the idea of a "pure Ruby" library, but I am
> suffering the consequences and even considering jumping to Python; the
> pain is getting to be too much.

check out the speed gains one can get with FasterCSV and reconsider -
and it's
still pure ruby.

regards.

-a
Ea52304f84449ae1a3feabc6d3cd04f9?d=identicon&s=25 Greg Lorriman (Guest)
on 2006-03-15 20:15
(Received via mailing list)
>> Anyone got any ideas?

>Greg, look at this:

>   p Time.at(0)

>It starts at 1 o'clock.

Unfathomable! What does it mean?!?! I am entirely perplexed by this
reality.

Greg
Ea52304f84449ae1a3feabc6d3cd04f9?d=identicon&s=25 Greg Lorriman (Guest)
on 2006-03-15 20:16
(Received via mailing list)
>> I like the purity of the idea of a "pure Ruby" library, but I am
>> suffering the consequences and even considering jumping to Python; the
>> pain is getting to be too much.

>check out the speed gains one can get with FasterCSV and reconsider - and it's
>still pure ruby

Sounds promising. I particularly like the sound of "Faster", in
"FasterCSV".

thanks for that

Greg
93d566cc26b230c553c197c4cd8ac6e4?d=identicon&s=25 Pit Capitain (Guest)
on 2006-03-15 20:44
(Received via mailing list)
Greg Lorriman schrieb:
>>  p Time.at(0)
>>It starts at 1 o'clock.
>
> Unfathomable! What does it mean?!?! I am entirely perplexed by this
> reality.

Greg, sorry for the noise. Time.at(0) is "epoch" (1970-01-01 00:00:00
GMT). My timezone is GMT + 1, so epoch happened to be at 1 o'clock. I
suppose that's the reason why your algorithm didn't work.

Regards,
Pit
Ea52304f84449ae1a3feabc6d3cd04f9?d=identicon&s=25 Greg Lorriman (Guest)
on 2006-03-15 21:24
(Received via mailing list)
>>  p Time.at(0)
>>It starts at 1 o'clock.

>> Unfathomable! What does it mean?!?! I am entirely perplexed by this
>> reality.



>Greg, sorry for the noise. Time.at(0) is "epoch" (1970-01-01 00:00:00
>GMT). My timezone is GMT + 1, so epoch happened to be at 1 o'clock. I
>suppose that's the reason why your algorithm didn't work.

Well that is the answer, then. Thankyou very much for that. Perhaps the
docs need expanding a little. I think even a computer scientist might
trip up on "epoch". I was thinking, in fact, that Time isn't a
practical Time/Date implementation and was possibly concieved in an
academic mind, which your observation would seem to confirm; I don't
think I've ever used such an awkward time/date implementation. However
I haven't used Date yet!!! :)

Greg
This topic is locked and can not be replied to.