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:
21
fhem/fhem.pl
21
fhem/fhem.pl
@@ -3978,7 +3978,8 @@ fhemTzOffset($)
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub
|
sub
|
||||||
fhemTimeGm($$$$$$) {
|
fhemTimeGm($$$$$$)
|
||||||
|
{
|
||||||
# see http://de.wikipedia.org/wiki/Unixzeit
|
# see http://de.wikipedia.org/wiki/Unixzeit
|
||||||
my ($sec,$min,$hour,$mday,$month,$year) = @_;
|
my ($sec,$min,$hour,$mday,$month,$year) = @_;
|
||||||
|
|
||||||
@@ -3986,21 +3987,25 @@ fhemTimeGm($$$$$$) {
|
|||||||
# $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
|
||||||
|
|||||||
Reference in New Issue
Block a user