heutiges datum yyyymmdd in eine variable schreiben...
scheuri
- perl
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
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
$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
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
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);
print "dbdate < aktdate" if ($dbdate < $aktdate);
nochmals danke
scheuri
Hoffe es hilft
Kai
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