Timestamp oder Epochenwert in Datum umwandeln - live
Ich stand heute mal wieder vor dem Problem, daß eines der von mir betreuten Scripte nicht richtig lief. Wie sich herausstellte, lag es daran, daß einige Zeitwerte falsch gesetzt waren. Wenn man erst mal so weit ist, daß man weiß, wo der Fehler steckt, kein Problem, nur bis man so weit ist, kann es schon man nerven. Vor allem, wenn man zig Timestamps von Hand in ein Datum und 'ne Uhrzeit umwandeln muß, um zu sehen, warum denn nun 'was schiefläuft.
Deswegen (tataaa) hab ich mir (und Euch, liebe Gäste) nun ein kleines Online-Script gebastelt, mit dem man solche Zeitwerte online umwandeln kann.
Kommentare zum Beitrag "Epoche live in Datum umwandeln"
Kommentar von Ulli
da gibts auch ne feine Seite:
http://www.epochconverter.com/
Kommentar von Admin
Grmbf... Schade daß man sowas immer nicht findet wenn man es mal braucht... Trotzdem Danke!
Kommentar von Karl
#!/usr/bin/perl
## Author: Jannik Geyer
## creation Date: 13.10.2011
## Version: 1.0
#--------------- Module werden eingebunden ---------------
use warnings; #standartmodul
use strict; #Standartmodul
use POSIX qw(strftime) ; #Zeit modul
my $gl_now_string_Tag = strftime "%d.%m.%Y", localtime; #Tage mit use Posix herausfinden
my $gl_now_string_Zeit = strftime "%H.%M.%S", localtime; #Zeit mit use Posix herausfinden
use Date::Calc qw(Days_in_Month Delta_Days); #importiert C Funktionen
#--------------- User Eingabe ----------------
print "Datum so eingeben: DD.MM.YYYY\n"; #aufforderung zum eingeben deines geburtstages.
#time festlegen von wann bis wann er berechnen soll
print "Geburtstag Eingeben: ";
my $geburtstag = <STDIN>;
chomp $geburtstag; #Zeilenumbruch von dem String Geburtstag entfernen
if ($geburtstag =~ /^([0-3]\d)\.([01]\d)\.(\d\d\d\d)$/ ) { # hier werden die gröbsten fehler bei der eingabe abgefangen
print "Datums Eingabe ok\n";
}
else {
print "Kein gültiges Datum. Programm ENDE!\n";
exit 8;
}
my $bis_wann = "$gl_now_string_Tag";
print "Zeit Eingeben:";
my $zeit1 = <STDIN>;
chomp $zeit1;
if ($zeit1 eq "" or $zeit1 !~ /[0-9]/){
$zeit1 = "00.00.00";
print "[Sie müssen Zahlen von 0-9 eingeben]set time to [$zeit1]\n";
}
my $zeit2 = "$gl_now_string_Zeit";
my ($schaltjahrrechner, $keinschaltjahr) = 0;
print "Zeitraum zwischen $geburtstag : $zeit1 - $gl_now_string_Tag : $gl_now_string_Zeit wird berechnet\n";
#------- Hash in dem die anzahl der tage, der entsprechenden monate stehen. --------
my %monats_tage_hash;
$monats_tage_hash{'01'} = "31";
$monats_tage_hash{'02'} = "28";
$monats_tage_hash{'03'} = "31";
$monats_tage_hash{'04'} = "30";
$monats_tage_hash{'05'} = "31";
$monats_tage_hash{'06'} = "30";
$monats_tage_hash{'07'} = "31";
$monats_tage_hash{'08'} = "31";
$monats_tage_hash{'09'} = "30";
$monats_tage_hash{'10'} = "31";
$monats_tage_hash{'11'} = "30";
$monats_tage_hash{'12'} = "31";
#----------------------------------
#--------- variablen mit den richtigen daten füllen ----------
my $year = substr( $geburtstag, 6, 4 );
my $endyear = substr( $bis_wann, 6, 4 );
my $month = substr( $geburtstag, 3, 2 );
my $endmonth = substr( $bis_wann, 3, 2 );
my $tag = substr( $geburtstag, 0, 2 );
my $endtag = substr( $bis_wann, 0, 2 );
my $tage_zaehler = 0;
my $days;
#variablen mit zeiten füllen
my $hour1 = substr( $zeit1, 0, 2 );
my $min1 = substr( $zeit1, 3, 2 );
my $sec1 = substr( $zeit1, 6, 2 );
my $hour2 = substr( $zeit2, 0, 2 );
my $min2 = substr( $zeit2, 3, 2 );
my $sec2 = substr( $zeit2, 6, 2 );
#----------------------------------------------
# hier wird jetzt geguckt ob das Datum in der Zukunft liegt oder richtig ist
print "Datum liegt in der ZUKUNFT! " and exit 8 , if ($year > $endyear);
print "Datum liegt in der ZUKUNFT! " and exit 8 , if ($year == $endyear and $month > $endmonth);
print "Datum liegt in der ZUKUNFT! " and exit 8 , if ($year == $endyear and $month == $endmonth and $tag > $endtag);
print "Datum liegt in der ZUKUNFT! " and exit 8 , if ($year == $endyear and $month == $endmonth and $tag == $endtag and $hour1 > $hour2);
print "Datum liegt in der ZUKUNFT! " and exit 8 , if ($year == $endyear and $month == $endmonth and $tag == $endtag and $hour1 == $hour2 and $min1 > $min2);
print "Datum liegt in der ZUKUNFT! " and exit 8 , if ($year == $endyear and $month == $endmonth and $tag == $endtag and $hour1 == $hour2 and $min1 == $min2 and $sec1 > $sec2);
#ausrechnen der tage + beachten der schaltjahre
while () {
$days = Days_in_Month( $year, $month ); #"Days_in_Month" - Funktion aus dem Modul Date::Calc
$tage_zaehler = $tage_zaehler + $days; #Tage zusamenzählen
$month++; # Monat um 1 erhöhen
if ( $month == 13 ) { # wenn $month gleich 13
if ( $year % 400 == 0 ) { # wenn $year / 400 kein rest entsteht dann
print "$year ist ein Schaltjahr\n"; # ist es ein schaltjahr
$schaltjahrrechner++; # schaltjahr zähler um 1 erhöhen
} #end if
elsif ( $year % 4 == 0 && $year % 100 != 0 ) { # wenn $year / 4 gleich kein Rest und $year /100 gleich Rest, dann
print "$year ist ein Schaltjahr\n"; # ist es ein schaltjahr
$schaltjahrrechner++; ##schaltjahr zähler um 1 erhöhen
} #end if
else { #wenn nichts von beide
$keinschaltjahr++; #zähler für kein schaltjahr um 1 erhöhen
print "$year ist kein Schaltjahr\n"; # ist kein schaltjahr
} #endif
$year++; #Jahr um 1 erhöhen
$month = 1; #Monat auf 1 setzen
} #end if
if ( $year == $endyear and $month == $endmonth ) { #wenn Endbedingung erreicht
last; #beende die schleife
} #end If
} #end schleife
my $Dd = Delta_Days( $year, $month, $tag, $endyear, $endmonth, $endtag );
$tage_zaehler = $tage_zaehler + $Dd;
#---------------------------------
my $day = 24;
my $stunde_zaehler = 0;
my $minute_zaehler = 0;
my $second_zaehler = 0;
#logarithmus der die zeit berechnet
if ( $hour1 < $hour2 or $hour1 == $hour2 ) { #wenn Anfangssutde kleiner oder gleich wie Endstunde ist
$stunde_zaehler = $hour2 - $hour1; #Rechne Endstunde - Anfangsstunde
}
else { #sonst
$stunde_zaehler = $hour2 - $hour1; #Rechne Endstunde - Anfangsstunde und speichere in der variable "$stunde_zaehler"
$stunde_zaehler = $stunde_zaehler + 24; #"$stunde_zaehler" + 24 stunden rechnen
$tage_zaehler = $tage_zaehler - 1; #"$tage_zaehler" um 1 verringern
}
if ( $min1 < $min2 or $min1 == $min2 ) { #wenn Anfangsmin kleiner oder gleich wie Endmin ist
$minute_zaehler = $min2 - $min1; #Rechne Endmin - Anfangsmin
}
else { #sonst
$minute_zaehler = $min2 - $min1; #Rechne Endstunde - Anfangsstunde und speicher e in der variable "$stunde_zaehler"
$minute_zaehler = $minute_zaehler + 60; #"$minute_zaehler" + 60 minuten rechnen
$stunde_zaehler = $stunde_zaehler - 1; #"$stunde_zaehler" um 1 verringern
if ( $stunde_zaehler == 0 ) { #wenn "$stunde_zaehler" gleich 0
$stunde_zaehler = 24; #setze ihn zurück auf 24
$tage_zaehler--; #und verringere um 1 tag
}
}
print "Schaltjahre = $schaltjahrrechner ||| Keine Schaltjahre = $keinschaltjahr\n";
#-----------prozentwert errechnen------------
my $counter = $keinschaltjahr / ( $schaltjahrrechner + $keinschaltjahr );
$counter = 1 - $counter;
my $tagerechner = 365 + $counter;
my $jahre = $tage_zaehler / $tagerechner;
#--------------------------------------------
my $gerundetes_jahr = sprintf( "%.5f", $jahre ); #auf fünf stellen runden
my $pos = index( $gerundetes_jahr, "." ); #position des Punktes herausfinden
$gerundetes_jahr = "0." . substr( $gerundetes_jahr, $pos + 1, 5 ); #Stellen nach dem punkt in variable "$gerundetes_jahr" speichern
$jahre = int $jahre; #für ausgaben bereit machen´
my $monate = 12 * $gerundetes_jahr; #prozentwert errechnen
my $gerundeter_monat = int $monate;
my $gerundeter_Tag = sprintf( "%.4f", $monate); #auf fünf stellen runden
my $pos2 = index( $gerundeter_Tag, "." ); #position des Punktes herausfinden
$gerundeter_Tag = "0." . substr( $gerundeter_Tag, $pos2 + 1, 3 ); #Stellen nach dem punkt in variable "$gerundeter_Tag" speichern
$gerundeter_Tag = $gerundeter_Tag * $monats_tage_hash{$endmonth}; #Tage ausrechnen
my $sekunden_anzahl_gesamt = 0;
$sekunden_anzahl_gesamt = 60 * 60 * 24 * $tage_zaehler + $second_zaehler + 60 * $minute_zaehler + 60 * 60 * $stunde_zaehler;
#------------------------------------ AUSGABE ----------------------------------------
my $ergebnisstring = "Sie sind insgesamt $tage_zaehler Tage alt, oder genauer sind sie $jahre Jahre, $gerundeter_monat Monate, $gerundeter_Tag Tage, $stunde_zaehler Stunden, $minute_zaehler Minuten und $second_zaehler Sekunden alt";
my $len = length ($ergebnisstring)-3;
$gerundeter_Tag = int $gerundeter_Tag;
print"+", "-" x $len, "+\n";
print"|Sie sind insgesamt $tage_zaehler Tage($sekunden_anzahl_gesamt Sekunden) alt, oder genauer sind sie $jahre Jahre, $gerundeter_monat Monate, $gerundeter_Tag Tage, $stunde_zaehler Stunden, $minute_zaehler Minuten und $second_zaehler Sekunden alt|\n";
print"+", "-" x $len, "+\n";
print "Zum beenden belibige Taste drücken...";
my $ende = <STDIN>;
#hier ist dass programm fertig...
#Perl ist perlig
#-------------------------------------------------------------------------------------
exit 0;