summaryrefslogtreecommitdiff
path: root/lib/Time/Local.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Time/Local.pm')
-rw-r--r--lib/Time/Local.pm10
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/Time/Local.pm b/lib/Time/Local.pm
index 8d3e49a4a1..d2d70dab20 100644
--- a/lib/Time/Local.pm
+++ b/lib/Time/Local.pm
@@ -59,9 +59,17 @@ sub timegm {
sub timelocal {
my $t = &timegm;
+ my $tt = $t;
my (@lt) = localtime($t);
my (@gt) = gmtime($t);
+ if ($t < $DAY and ($lt[5] >= 70 or $gt[5] >= 70 )) {
+ # Wrap error, too early a date
+ # Try a safer date
+ $tt = $DAY;
+ @lt = localtime($tt);
+ @gt = gmtime($tt);
+ }
my $tzsec = ($gt[1] - $lt[1]) * $MIN + ($gt[2] - $lt[2]) * $HR;
@@ -80,7 +88,7 @@ sub timelocal {
$time = $t + $tzsec;
return -1 if $cheat<0 and $^O ne 'VMS';
- @test = localtime($time);
+ @test = localtime($time + ($tt - $t));
$time -= $HR if $test[2] != $_[2];
$time;
}