scheuri: heutiges datum yyyymmdd in eine variable schreiben...

Hallo miteinander...

mit folgendem zeilen perl lesen ich das heutige datum aus, mit der formatierung yyyymmdd (o'reilly's kochbücher sei dank).

(my $day, my $month, my $year) = (localtime)[3,4,5];
printf("das heutige datum ist: %04d %02d %02d", $year+1900, $month+1, $day);

ausgabe sieht wie folgt aus:
das heutige datum ist 2000 07 04

ich möchte nun dieses Datum mit einem anderen Datum (aus einer DB) vergleichen, welche genauso (yyyymmdd) formatiert ist, habe aber keine ahnung wie ich das heutige Datum in eine einzelne variable lese, damit ich die beiden verrechnen kann...

hat jemand eine ahnung wie ich die obigen zeilen veranlassen kann, sich in eine variable zu schreiben?

vielen dank

scheuri

  1. Tag!

    ich möchte nun dieses Datum mit einem anderen Datum (aus einer DB) vergleichen, welche genauso (yyyymmdd) formatiert ist, habe aber keine ahnung wie ich das heutige Datum in eine einzelne variable lese, damit ich die beiden verrechnen kann...

    $datestring = sprintf("%04d%02d%02d", $year+1900, $month+1, $day);

    Vorzuziehen waere aber, das Datum in der DB als Anzahl der Sekunden seit 1970 abzulegen, und die jetzige Zeit einfach mit time() zu holen, und diese Zahlen dann zu vergleichen.
    Literatur: perlfunc: time, localtime, sprintf

    So long

    1. $datestring = sprintf("%04d%02d%02d", $year+1900, $month+1, $day);

      funktioniert bestens...herzlichen Dank!!

      Vorzuziehen waere aber, das Datum in der DB als Anzahl der Sekunden seit 1970 abzulegen, und die jetzige Zeit einfach mit time() zu holen, und diese Zahlen dann zu vergleichen.
      Literatur: perlfunc: time, localtime, sprintf

      ja...aber (leider?) benutze ich in der MySQL-DB die variable "timestamp" um das datum anzugeben, welches mit yyyymmddHHMMSS formatiert ist.
      Ich nehm an, dass ich zuerst den Wert des Timestamps auslesen, in epoch-seconds umrechnen, das heutige datum in epoch-seconds irgendwie einlesen und dann die beiden werte (die von der DB und die des heutigen Datum) vergleichen und dann noch in den gewünschten wert (tage, monate, etc) umrechnen muss.
      Und da muss ich schlichtweg passen...ich hoff ich krieg das auch auf die reihe...dann kann ichs das jetzige "script" ersetzten...aber im moment bin ich froh, dass es überhaupt funktionert...

      nochmals danke

      scheuri

      1. Hallo Scheuri,

        [...]

        ja...aber (leider?) benutze ich in der MySQL-DB die variable "timestamp" um das datum anzugeben, welches mit yyyymmddHHMMSS formatiert ist.
        Ich nehm an, dass ich zuerst den Wert des Timestamps auslesen, in epoch-seconds umrechnen, das heutige datum in epoch-seconds irgendwie einlesen und dann die beiden werte (die von der DB und die des heutigen Datum) vergleichen und dann noch in den gewünschten wert (tage, monate, etc) umrechnen muss.
        Und da muss ich schlichtweg passen...ich hoff ich krieg das auch auf die reihe...dann kann ichs das jetzige "script" ersetzten...aber im moment bin ich froh, dass es überhaupt funktionert...

        Time::Local hilft Dir weiter. Das Paket enthält die Fkt timelocal, die Umkehr zu localtime, d.h. es erstellt aus "normaler" Zeit, die Epochalzeit.

        perldoc -f time;
        perldoc -f localtime;
        perldoc Time::Local

        Ich hab' mal was zusammengeklappert, müsste eigentlich fkt.

        #!/pfad/zu/perl/perl -w

        use strict;
        use Time::Local;

        #DB Datum

        Beispieldatum nach Timestamp

        my $dbdate='20000703101010';

        #interessante Werte extrahieren
        my ($dbyear, $dbmonth, $dbday)= $dbdate =~ m/(\d{4})(\d{2})(\d){2}/;

        #in epochalzeit umw.
        $dbdate = timelocal(0,0,0,$dbday,$dbmonth,$dbyear);

        #Aktuelles Datum

        #interessante Werte extrahieren
        my ($aktday, $aktmonth, $aktyear) =  (localtime[3,4,5];

        #in Epochalzeit umwandeln
        my $aktdate = timelocal(0,0,0,$aktday,$aktmonth+1,$aktyear+1900);

        vergleichen : )

        print "dbdate < aktdate" if ($dbdate < $aktdate);

        nochmals danke

        scheuri

        Hoffe es hilft
           Kai

  2. Hallo Scheuri,

    printf("das heutige datum ist: %04d %02d %02d", $year+1900, $month+1, $day);

    hat jemand eine ahnung wie ich die obigen zeilen veranlassen kann, sich in eine variable zu schreiben?

    Zwei Variablen kannst Du mit Hilfe eines Punktes aneinanderhängen.

    z.B. $date = $year.$month

    $date ist hier eine String-Variable.

    Ob $date = ($year + 1900).($month + 1).$day funzt, mußt Du mal ausprobieren. Ansonsten ging's auch so:

    $date = (($year + 1900) * 10000) + (($month + 1) * 100) + $day

    $date ist dann eine numerische Variable

    Gruß
    Patric