DateTime::Format::Strptime version 0.0702 (and earlier) incorrectly processes the Olson time zone string
America/New_York into America/New_york which then correctly fails to produce a TimeZone object. This patch tests for the condition and provides a fix in the module. -kolibrie
Thu Sep 27 14:42:54 EDT 2007 [EMAIL PROTECTED]
* allow Olson Time zone 'America/New_York' to parse
diff -rN -u old-DateTime-Format-Strptime/lib/DateTime/Format/Strptime.pm new-DateTime-Format-Strptime/lib/DateTime/Format/Strptime.pm
--- old-DateTime-Format-Strptime/lib/DateTime/Format/Strptime.pm 2007-09-27 14:46:19.000000000 -0400
+++ new-DateTime-Format-Strptime/lib/DateTime/Format/Strptime.pm 2007-09-27 14:46:19.000000000 -0400
@@ -330,7 +330,7 @@
if ($tz_olson) {
$tz_olson = ucfirst lc $tz_olson;
- $tz_olson =~ s|([/_])(\w)|$1\U$2|;
+ $tz_olson =~ s|([/_])(\w)|$1\U$2|g;
my $tz = DateTime::TimeZone->new( name => $tz_olson );
$self->local_croak("I don't recognise the time zone '$tz_olson'.") and return undef unless $tz;
$use_timezone = $set_time_zone = $tz;
diff -rN -u old-DateTime-Format-Strptime/t/007_edge.t new-DateTime-Format-Strptime/t/007_edge.t
--- old-DateTime-Format-Strptime/t/007_edge.t 2007-09-27 14:46:19.000000000 -0400
+++ new-DateTime-Format-Strptime/t/007_edge.t 2007-09-27 14:46:19.000000000 -0400
@@ -2,7 +2,7 @@
# t/007_edge.t - these tests are for edge case bug report errors
-use Test::More tests => 10;
+use Test::More tests => 15;
use DateTime;
use DateTime::Format::Strptime;
@@ -43,6 +43,19 @@
is($parsed->epoch,'1131143580', 'Time zone applied to string');
}
+# Olson Time Zone munging does not corrupt New_York
+{
+ my $parser = DateTime::Format::Strptime->new(
+ pattern => '%F %T %O',
+ on_error => 'undef',
+ );
+ isa_ok($parser, 'DateTime::Format::Strptime');
+ my $parsed = $parser->parse_datetime('2004-12-14 16:25:15 America/New_York');
+ isa_ok($parsed, 'DateTime');
+ is($parsed->datetime,'2004-12-14T16:25:15', 'Date and time have not drifted');
+ is($parsed->time_zone->name,'America/New_York', 'Time zone determined from string');
+ is($parsed->epoch,'1103059515', 'Time zone applied to string');
+}
sub test {
signature.asc
Description: Digital signature
