Marcus: Datum -» date-Konvertierung

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?

  1. 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
               942660822

    unterstü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

    1. Auch hi!

      15. November 1999, 12.01h
      in
                 942660822

      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.

      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";