Re: DateTime setting invalid zone.

2013-03-13 Thread Dave Rolsky

On Tue, 12 Mar 2013, Bill Moseley wrote:


So, I found some old that wrapped a set_time_zone in an eval.

my $dt = DateTime->new(
   year => 2013,
   month => 3,
   day => 10,
   hour => 2,
   minute => 4,
   time_zone => 'floating',
);

eval { $dt->set_time_zone( 'America/Los_Angeles' ); };

print "$dt " . $dt->time_zone . "\n";


The code was using the eval to check if the timezone set failed, and if it
did went on to do something else with $dt (like set to UTC).   But, it
seems like even if it fails the time zone gets set.  The above returns this
invalid time:

2013-03-10T02:04:00
DateTime::TimeZone::America::Los_Angeles=HASH(0x7fc4c2aafc90)

My question is should DateTime associate that timezone to $dt if the
set_time_zone call actually throws an exception?


This is almost certainly a bug.


-dave

/*
http://VegGuide.org   http://blog.urth.org
Your guide to all that's veg  House Absolute(ly Pointless)
*/


Re: DateTime setting invalid zone.

2013-03-13 Thread Mark Stosberg
On 03/13/2013 12:10 PM, Dave Rolsky wrote:
> On Tue, 12 Mar 2013, Bill Moseley wrote:
> 
>> So, I found some old that wrapped a set_time_zone in an eval.
>>
>> my $dt = DateTime->new(
>>year => 2013,
>>month => 3,
>>day => 10,
>>hour => 2,
>>minute => 4,
>>time_zone => 'floating',
>> );
>>
>> eval { $dt->set_time_zone( 'America/Los_Angeles' ); };
>>
>> print "$dt " . $dt->time_zone . "\n";
>>
>>
>> The code was using the eval to check if the timezone set failed, and
>> if it
>> did went on to do something else with $dt (like set to UTC).   But, it
>> seems like even if it fails the time zone gets set.  The above returns
>> this
>> invalid time:
>>
>> 2013-03-10T02:04:00
>> DateTime::TimeZone::America::Los_Angeles=HASH(0x7fc4c2aafc90)
>>
>> My question is should DateTime associate that timezone to $dt if the
>> set_time_zone call actually throws an exception?
> 
> This is almost certainly a bug.

Would a fix to first clone the object, attempt to change time zone, and
then only set the timezone on the original object if it succeeds?

   Mark