Changeset 24524

Show
Ignore:
Timestamp:
11/21/08 01:06:08 (7 weeks ago)
Author:
daisuke
Message:

make sure to cache timezones

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/DateTime-Lite/trunk/lib/DateTime/Lite/TimeZone.pm

    r24512 r24524  
    1515use DateTime::Lite::TimeZone::UTC; 
    1616use DateTime::Lite::OlsonDB; 
     17 
     18our %CachedTimeZones; 
    1719 
    1820use constant INFINITY     =>       100 ** 1000 ; 
     
    3537    my $name = $p{name}; 
    3638    my $conf; 
     39    my $zone; 
    3740    if (defined $name) { 
    3841        if ( exists $DateTime::Lite::TimeZone::Catalog::LINKS{ $name } ) { 
     
    4144            $name = $DateTime::Lite::TimeZone::Catalog::LINKS{ uc $name }; 
    4245        } 
    43  
     46    } 
     47 
     48    if (defined $name) { 
     49        return $CachedTimeZones{$name} if $CachedTimeZones{$name}; 
    4450        unless ( $name =~ m,/, || $SpecialName{ $name }) { 
    4551            if ( $name eq 'floating' ) { 
    46                 return DateTime::Lite::TimeZone::Floating->new; 
     52                return $CachedTimeZones{$name} = DateTime::Lite::TimeZone::Floating->new; 
    4753            } 
    4854            if ( $name eq 'local' ) { 
    49                 return DateTime::Lite::TimeZone::Local->TimeZone(); 
     55                return $CachedTimeZones{$name} = DateTime::Lite::TimeZone::Local->TimeZone(); 
    5056            } 
    5157     
    5258            if ( $name eq 'UTC' || $name eq 'Z' ) { 
    53                 return DateTime::Lite::TimeZone::UTC->new; 
     59                return $CachedTimeZones{$name} = DateTime::Lite::TimeZone::UTC->new; 
    5460            } 
    5561 
    56             return DateTime::Lite::TimeZone::OffsetOnly->new( offset => $name ); 
     62            return $CachedTimeZones{$name} = DateTime::Lite::TimeZone::OffsetOnly->new( offset => $name ); 
    5763        } 
     64 
    5865        $conf = _load_time_zone($name); 
    5966    } 
     
    6370    } 
    6471 
    65     my $zone = $class->new(%$conf); 
     72    $zone = $class->new(%$conf); 
    6673 
    6774    if ( $zone->is_olson() ) { 
     
    7885    } 
    7986 
     87    $CachedTimeZones{$name} = $zone; 
    8088    return $zone; 
    8189}