sub _julianday{ my ($day, $month, $year) = @_; my ($jd, $a, $y, $m) = (); if($year < 0){ $year++; } $a = (14 - $month)/12; $y = $year + 4800 - $a; $m = $month + 12 * $a - 3; # zunaechst gregorianisch rechnen, ist jd < 2299160 (4.10.1582), wird julianisch gerechnet $jd = $day + ((153 * $m + 2)/5) + 365 * $y + ($y/4) - ($y/100) + ($y/400) - 32045; # hier wird julianisch gerechnet if( $jd < 2299160 ){ $jd = $day + ((153 * $m +2)/5) + 365 * $y + ($y/4) - 32083; } return $jd; } sub _julianday_to_date{ my $jd = shift; # Gregorian, common my $a = $jd + 32044; my $b = ( ( $a * 4 + 3)/146097); my $c = $a - (146097 * $b/4); my $gregorian = 1; # Pruefe auf Julian if($jd <= 2299160){ $b = 0; $c = $jd + 32082; $gregorian = 0; } my $d = ((4 * $c + 3)/1461); my $e = $c - ((1461 * $d)/4); my $m = (($e * 5 + 2)/153); my $day = $e - ((153 * $m +2)/5) + 1; my $month = $m + 3 - ($m/10) * 12; my $year = 100 * $b + $d - 4800 + ($m/10); if($year < 0){ $year--; } if($year == 0){ $year = -1; } return ($day, $month, $year, $gregorian); }