Vedat Yetkin: sekunden zu datum algorythmus

Beitrag lesen

Hallo Thomas,

was ich wissen möchte wie im perl eben diese "zurückrechnung" erfolgt. also ich möchte den algorythmus kennen mit dem perl aus den sekunden das datum zurückrechnet.

Geht es Dir darum, welchen Algorithmus PERL selbst dazu verwendet, oder möchtest Du einfach einen Algorithmus, der das auch kann?

Bei letzterem kann ich Dir aushelfen, hab grad mal eins geschrieben...
Ich denke, Du wirst damit klar kommen ... ansonsten einfach fragen.

Grüße, Vedat

#!/usr/bin/perl

sj ($jahr) gibt zurück, ob ein Jahr ein Schaltjahr ist

Gibt 1 für ja und 0 für nein zurück.

sub sj {
  my $j = shift;
  my $sj = 0;
  if (($j % 4)==0) {$sj++} #Schaltjahr
  if (($j % 100)==0) {$sj--} #kein Schaltjahr, wenn durch 100 teilbar
  if (($j % 1000)==0) {$sj++} # aber wenn auch durch 1000 teilbar, dann doch Schaltjahr
  return $sj;
}

sub tim ($monat, $jahr);

Gibt zurück, wieviele Tage der aktuelle Monat hat.

sub tim {
  my $m = shift;
  my $j=shift;
  my @tage = (0,31,28,31,30,31,30,31,31,30,31,30,31);
  $tim=$tage[$m];
  if ($m==2) { $tim += sj($j); }
  return $tim;
}

my ($jahr, $monat, $tag) = (1970,1,1); # Das Ganze beginnt bei 1.1.1970, 0:00 Uhr
my $t=time;  # hier steht das Datum im Sekundenformat ...
my $zaehler=0; # hier zählen wir die Sekunden soweit hoch, bis wir das obige Datum erreicht haben

Erst mal die Jahre hochzählen ...

while ($zaehler<$t) {
$zaehler +=(365 * 24 * 60 * 60);
$zaehler += (sj ($jahr) * 24 * 60 * 60);
$jahr++;
}
$jahr--;  #der Algorithmus oben schiesst um ein Jahr über :-)
$zaehler -=(365 * 24 * 60 * 60);
$zaehler -= (sj ($jahr) * 24 * 60 * 60);

Das Gleiche mit dem Monat...

while ($zaehler<$t) {
$zaehler +=(tim($monat,$jahr) * 24 * 60 * 60);
$monat++;
}
$monat--;
$zaehler -=(tim($monat,$jahr) * 24 * 60 * 60);

Jetzt noch die Tage

while ($zaehler<$t) {
$zaehler +=(24 * 60 * 60);
$tag++;
}
$tag--;

Wenn Du lustig bist, kannst Du noch die Stunden und Minuten auf diese Weise hochzählen....

#Schnell mal kucken, was der gerechnet hat ...
print "$tag.$monat.$jahr";

... also bei mir hat er richtig gerechnet *g*

exit(0);