fhem.pl: fix fhemTimeGm fir year < 1970 (Forum #38610)

git-svn-id: svn://svn.code.sf.net/p/fhem/code/trunk@8850 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig
2015-06-28 15:03:28 +00:00
parent 34422e85b1
commit a021bcdf4b

View File

@@ -3978,29 +3978,34 @@ fhemTzOffset($)
} }
sub sub
fhemTimeGm($$$$$$) { fhemTimeGm($$$$$$)
# see http://de.wikipedia.org/wiki/Unixzeit {
my ($sec,$min,$hour,$mday,$month,$year) = @_; # see http://de.wikipedia.org/wiki/Unixzeit
my ($sec,$min,$hour,$mday,$month,$year) = @_;
# $mday= 1.. # $mday= 1..
# $month= 0..11 # $month= 0..11
# $year is year-1900 # $year is year-1900
$year+= 1900; $year += 1900;
my $isleapyear= $year % 4 ? 0 : $year % 100 ? 1 : $year % 400 ? 0 : 1; my $isleapyear= $year % 4 ? 0 : $year % 100 ? 1 : $year % 400 ? 0 : 1;
my $leapyears= int(($year-1969)/4) - int(($year-1901)/100) + int(($year-1601)/400);
#Debug sprintf("%02d.%02d.%04d %02d:%02d:%02d %d leap years, is leap year: %d", $mday,$month+1,$year,$hour,$min,$sec,$leapyears,$isleapyear); # Forum #38610
my $leapyears_date = int(($year-1)/4) -int(($year-1)/100) +int(($year-1)/400);
my $leapyears_1970 = int((1970 -1)/4) -int((1970 -1)/100) +int((1970 -1)/400);
my $leapyears = $leapyears_date - $leapyears_1970;
if ( $^O eq 'MacOS' ) { if ( $^O eq 'MacOS' ) {
$year-= 1904; $year -= 1904;
} else { } else {
$year-= 1970; # the Unix Epoch $year -= 1970; # the Unix Epoch
} }
my @d= (0,31,59,90,120,151,181,212,243,273,304,334); # no leap day my @d = (0,31,59,90,120,151,181,212,243,273,304,334); # no leap day
# add one day in leap years if month is later than February # add one day in leap years if month is later than February
$mday++ if($month>1 && $isleapyear); $mday++ if($month>1 && $isleapyear);
return $sec+60*($min+60*($hour+24*($d[$month]+$mday-1+365*$year+$leapyears))); return $sec+60*($min+60*($hour+24*
($d[$month]+$mday-1+365*$year+$leapyears)));
} }
sub sub