Datum -» date-Konvertierung
Marcus
- webserver
Hallo.
Ich habe hier ein CGI-Skript, welches Daten im Format 1970+Sekunden (o.ä.; Ihr wisst aber doch, was ich meine?) benutzt. Nun habe ich die ehrenvolle Aufgabe, eine ältere Datenbank in dieses Format zu konvertieren.
Gibt es ein Skript (gerne auch auf anderen Servern und nicht zum Download), welches die Umwandlung von z.B.
15. November 1999, 12.01h
in
942660822
unterstützt?
Hi,
Gibt es ein Skript (gerne auch auf anderen Servern und nicht zum Download), welches die Umwandlung von z.B.
15. November 1999, 12.01h
in
942660822unterstützt?
für Perl gibt es das Modul Time::Local, das sozusagen die Umkehrung von localtime darstellt. Vermutlich mußt Du das Datum immer noch selbst bearbeiten (das "h" am Ende weg z.B.), aber das dürfte mit ein, zwei RegExp recht einfach gehen.
Cheatah
Auch hi!
15. November 1999, 12.01h
in
942660822für Perl gibt es das Modul Time::Local, das sozusagen die Umkehrung von localtime darstellt. Vermutlich mußt Du das Datum immer noch selbst bearbeiten (das "h" am Ende weg z.B.), aber das dürfte mit ein, zwei RegExp recht einfach gehen.
Wird sich nicht ganz vermeiden lassen, da timelocal() und timegm() keine Strings parsen, sondern die Einzelteile einer Datum-/Zeitangabe verlangen. Aber mit der Power der RegExpe ist das ja kein Problem weiter. Und weil mir gerade so war, hab ich das in einem kleinen Script ausprobiert. Aufruf z.B.
perl parsetime.pl "15. November 1999, 12.01h"
sodass der gesamte String nach $ARGV[0] geht. Wenn das Format des Zeitstrings nicht haargenau mit dem von Marcus angegebenen uebereinstimmt, muss die Variable $TIMESTRING_FORMAT angepasst werden.
Calocybe
use Time::Local;
$TIMESTRING_FORMAT = '(\d+).\s+(\S+)\s+(\d+)\D+(\d+).(\d+)h';
sub ParseLocaltimeString {
my @MONTHS = ("Jan", "Feb", "Ma[re]", "Apr", "Ma[yi]", "Jun", "Jul", "Aug", "Sep", "O[ck]t", "Nov", "De[cz]");
my $timestring = shift;
my $i;
my ($day, $monthstring, $year, $hour, $min, $month);
if (($day, $monthstring, $year, $hour, $min) = ($timestring =~ /$TIMESTRING_FORMAT/)) {
$month = -1;
for ($i=0; $i<12; $i++) { $month = $i if ($monthstring =~ /^$MONTHS[$i]/) }
if ($month == -1) {
print STDERR "ParseLocaltimeString: Ungueltiger Monatsname.\n";
return 0;
}
$year -= 1900 if ($year >= 1900);
return timelocal(00, $min, $hour, $day, $month, $year);
} else {
print STDERR "ParseLocaltimeString: Kein gueltiger Datums-/Zeitausdruck.\n";
return 0;
}
}
$x = $ARGV[0];
$time = ParseLocaltimeString($x);
print "Time string to parse is: ", $x, "\n";
print "ParseLocaltimeString returns: ", $time, "\n";
print "To localtime() this is: ", scalar(localtime($time)), "\n";