Time class changed in ruby-1.8.6?

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

···

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.

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

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-forum.com/\.

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

It could very well be, my apologies, I'll poke through the rails
changelogs. Thanks.

- donald

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

It hasn't been here.

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

···

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.

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

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

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 :slight_smile:

···

--
Posted via http://www.ruby-forum.com/\.

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

I suggest to use "ri" and check out comments - maybe you'll find something
useful informations about update 1.8.5-1.8.6 and changes in this class.
Check it out!

Yours,
Killavus.

···

2007/9/2, Matthew Rudy <matthewrudyjacobs@gmail.com>:

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 :slight_smile:

--
Posted via http://www.ruby-forum.com/\.