[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

time class changed in ruby-1.8.6?

Ball, Donald A Jr (Library)

8/22/2007 8:10:00 PM

Hi guys. I'm in the process of migrating a ruby app from 1.8.5 to 1.8.6
and noticed that the Time class seems to have changed. It used to have a
convenient to_date method, but is now lacking it, and I've had little
luck trying to find the release notes indicating why this changed. Can
anyone point in that direction and/or suggest a better way of converting
times to dates? Merci.

- donald

8 Answers

James Gray

8/22/2007 8:15:00 PM

0

On Aug 22, 2007, at 3:10 PM, Ball, Donald A Jr (Library) wrote:

> Hi guys. I'm in the process of migrating a ruby app from 1.8.5 to
> 1.8.6
> and noticed that the Time class seems to have changed. It used to
> have a
> convenient to_date method, but is now lacking it, and I've had little
> luck trying to find the release notes indicating why this changed.

I don't ever remember such a method in Ruby. Rails adds a to_date()
method to Time though. Could that be what you are thinking of?

James Edward Gray II


Florian Frank

8/22/2007 9:38:00 PM

0

Ball, Donald A Jr (Library) wrote:
> Hi guys. I'm in the process of migrating a ruby app from 1.8.5 to 1.8.6
> and noticed that the Time class seems to have changed.

I think the whole date implemetation was substituted by a new
implementation (date2), which isn't fully compatible to the old one. Now
Time#to_date, which is mixed in from file date.rb, is a private method.
You could __send__ :to_date to your Time object. I have now idea why it
is private now. Why aren't all three to_* methods defined in all Time,
Date, and DateTime classes? This would make converting between different
time objects much easier.

--
Florian Frank

Daniel DeLorme

8/22/2007 9:59:00 PM

0

Florian Frank wrote:
> Ball, Donald A Jr (Library) wrote:
>> Hi guys. I'm in the process of migrating a ruby app from 1.8.5 to 1.8.6
>> and noticed that the Time class seems to have changed.
>
> I think the whole date implemetation was substituted by a new
> implementation (date2), which isn't fully compatible to the old one. Now
> Time#to_date, which is mixed in from file date.rb, is a private method.
> You could __send__ :to_date to your Time object. I have now idea why it
> is private now. Why aren't all three to_* methods defined in all Time,
> Date, and DateTime classes? This would make converting between different
> time objects much easier.

You're probably using rails. Ruby used to *not* have a Time#to_date
method but now it has one which is private. And the to_date helper added
by rails is further up the call chain and therefore gets hidden by the
private method, so that's what you get. :-/

Add one of the following in your environment.rb:
class Time; public :to_date ;end #use the ruby-1.8.6 version
class Time; remove_method :to_date ;end #use the rails version

Daniel

Florian Frank

8/22/2007 11:43:00 PM

0

Daniel DeLorme wrote:
> You're probably using rails.

No, I am not. Maybe Mr. Ball did. I didn't remember, if there already
where any of those methods before, but I have implemented my own set of
to_* methods to convert between the different objects a while ago. Of
course there also had to be solutions to convert a DateTime to a Time
object, if the latter is not valid, e.g. before the epoch, or a Date
object to a Time object: which time will it show?

It still doesn't make sense to not have any way to convert between the
three types of objects (short of using #parse/the ugly long
constructors) or have only a part of them as private methods. And why
are the objects immutable? And if they have to be immutable, why is it
so difficult to create a new object from the old, that shows 13:13:13
instead of 23:13:42 without adding the exact amount of seconds to it or
use constructors/parse?

> Ruby used to *not* have a Time#to_date
> method but now it has one which is private. And the to_date helper added
> by rails is further up the call chain and therefore gets hidden by the
> private method, so that's what you get. :-/
>
> Add one of the following in your environment.rb:
> class Time; public :to_date ;end #use the ruby-1.8.6 version
> class Time; remove_method :to_date ;end #use the rails version

I think Ruby without Rails should also be able to handle dates and times
well. When I implemented those methods myself, I wondered if anyone uses
all these classes at all, because so much was missing to make them
useful. And if everybody keeps monkey patching the missing methods, it's
no wonder, that things break, if the standard library changes again.

To create a good API for these timely things seems to be difficult: Java
for example trys it for the second time: its Calendar API is very, very
powerful but it still sucks, especially for the simple things.

--
Florian Frank

Daniel DeLorme

8/23/2007 12:13:00 AM

0

Florian Frank wrote:
> Daniel DeLorme wrote:
>> You're probably using rails.
>
> No, I am not. Maybe Mr. Ball did.

Of course, I meant the OP

> I think Ruby without Rails should also be able to handle dates and times
> well. When I implemented those methods myself, I wondered if anyone uses
> all these classes at all, because so much was missing to make them
> useful. And if everybody keeps monkey patching the missing methods, it's
> no wonder, that things break, if the standard library changes again.

100% agree. In addition to date/time conversion I've also found it
annoyingly difficult and clunky to work with multiple timezones.
Date/time classes should be 1st-class citizens of the ruby core but
instead they are relegated to the stdlib or 3rd-party libraries. I dream
of the day when we could have automatic Time <=> DateTime conversion
(like Fixnum <=> Bignum) and natural timezone handling. I love how ruby
makes everything seem effortless and natural, but date/time handling is
unfortunately a sore spot. :-/

Daniel

Matthew Rudy Jacobs

9/2/2007 3:29:00 PM

0

Ball, Donald A Jr (Library) wrote:
> Hi guys. I'm in the process of migrating a ruby app from 1.8.5 to 1.8.6
> and noticed that the Time class seems to have changed. It used to have a
> convenient to_date method, but is now lacking it, and I've had little
> luck trying to find the release notes indicating why this changed. Can
> anyone point in that direction and/or suggest a better way of converting
> times to dates? Merci.
>
> - donald

I think I've found another change.
I don't know if this is on purpose.

But at some point before ruby 1.8.6 the following code worked;

>> Time.now.strftime("%d %h '%y")
=> "02 Sep '07"
>> Time.now.strftime("%d %b '%y")
=> "02 Sep '07"

But now in 1.8.6;

>> Time.now.strftime("%d %h '%y")
=> ""
>> Time.now.strftime("%d %b '%y")
=> "02 Sep '07"

ie. seemingly support for "%h" has been removed.

--
Posted via http://www.ruby-....

Konrad Meyer

9/2/2007 8:17:00 PM

0

On Sunday 02 September 2007 08:28:45 am Matthew Rudy wrote:
> Ball, Donald A Jr (Library) wrote:
> > Hi guys. I'm in the process of migrating a ruby app from 1.8.5 to 1.8.6
> > and noticed that the Time class seems to have changed. It used to have a
> > convenient to_date method, but is now lacking it, and I've had little
> > luck trying to find the release notes indicating why this changed. Can
> > anyone point in that direction and/or suggest a better way of converting
> > times to dates? Merci.
> >
> > - donald
>
> I think I've found another change.
> I don't know if this is on purpose.
>
> But at some point before ruby 1.8.6 the following code worked;
>
> >> Time.now.strftime("%d %h '%y")
> => "02 Sep '07"
> >> Time.now.strftime("%d %b '%y")
> => "02 Sep '07"
>
> But now in 1.8.6;
>
> >> Time.now.strftime("%d %h '%y")
> => ""
> >> Time.now.strftime("%d %b '%y")
> => "02 Sep '07"
>
> ie. seemingly support for "%h" has been removed.

It hasn't been here.

irb(main):001:0> Time.now.strftime("%h")
=> "Sep"
irb(main):002:0> RUBY_VERSION
=> "1.8.6"

--
Konrad Meyer <konrad@tylerc.org> http://konrad.sobertil...

Matthew Rudy Jacobs

9/2/2007 8:27:00 PM

0

Konrad Meyer wrote:
> It hasn't been here.
>
> irb(main):001:0> Time.now.strftime("%h")
> => "Sep"
> irb(main):002:0> RUBY_VERSION
> => "1.8.6"

:-S
That's annoying.
If only I didn't use windows :)


--
Posted via http://www.ruby-....