From: Kevin Cernekee Date: Fri, 25 Mar 2011 16:26:22 GMT Subject: Re: [PATCH (BUGFIX)] gitweb: Fix handling of fractional timezones in parse_date Message-ID: In-Reply-To: <201103251620.28811.jnareb@gmail.com> 2011/3/25 Jakub Narebski : > @@ -2921,8 +2921,10 @@ sub parse_date { >        $date{'iso-8601'}  = sprintf "%04d-%02d-%02dT%02d:%02d:%02dZ", >                             1900+$year, 1+$mon, $mday, $hour ,$min, $sec; > > -       $tz =~ m/^([+\-][0-9][0-9])([0-9][0-9])$/; > -       my $local = $epoch + ((int $1 + ($2/60)) * 3600); > +       my ($tz_sign, $tz_hour, $tz_min) = > +               ($tz =~ m/^([+\-])([0-9][0-9])([0-9][0-9])$/); It's just a matter of personal preference, but I would find this regexp slightly easier to read: + ($tz =~ m/^([+\-])([0-9]{2})([0-9]{2})$/); > +       $tz_sign = ($tz_sign eq '-' ? -1 : +1); > +       my $local = $epoch + $tz_sign*($tz_hour + ($tz_min/60.0))*3600; If you wanted to avoid floats, you could do something like: + my $local = $epoch + $tz_sign * ($tz_hour * 3600 + $tz_min * 60);