Datumsformat konvertieren ISO 9601 <=> DIN 1355

Forum zur Erstellung von Schaltern über den Befehlseditor
Antworten
Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Datumsformat konvertieren ISO 9601 <=> DIN 1355

Beitrag von Kundal » 15. Mai 2010 13:40

Dieser aus 4 Buttons bestehende Menübutton konvertiert das Datum zwischen dem in Deutschland und vielen europäischen Ländern gebräuchlichen Format "DIN 1355" (TT.MM.JJJJ) und der internationalen Norm "ISO 8601" (YYYY-MM-DD).

ACHTUNG!
Bei der Verwendung dieser Buttons sollte man die zu bearbeitenden Dateien sehr sorgfältig auswählen.
Es ist wichtig (vor allem für die kurzen Formate) zu wissen, in welchem Format das Datum in den Dateinamen vorliegt, um den passenden Button zu wählen.
Ausserdem sollten die Namen keine weiteren Zahlenfolgen enthalten, die das Script als Datum interpretiert.
Vor allem 6- und 8-stellige Zahlenblöcke und Sequenzen 2-stelliger Zahlen mit Trennzeichen sollten ausser dem Datum nicht vorhanden sein.
Ein Dateiname wie "Text 01 02 15.05.10 Text.ext" würde sonst evtl. das Datum "01.02.15" erhalten.


Features:
  • Das Datum wird automatisch gefunden, auch wenn es in der Mitte des Dateinamens steht.
  • Es können verschiedene Trennzeichen enthalten sein, die zwischen den Datumsteilen gleich sein müssen
    (. , ; _ - und Leerzeichen)
    .
  • Es werden Daten zwischen 1900 und 2019 erkannt.
    Ich habe diese Begrenzung vorgenommen, da ich es nicht für sinnvoll hielt Daten der fernen Zukunft zu erkennen und jede Begrenzung hilft falsch-positive Fehler zu vermeiden.
  • Bei den kurzen Formaten DDMMJJ und YY-MM-DD werden die Jahre 1900-2099 erkannt.
    Eine Begrenzung ist hier nicht sinnvoll möglich.
  • Die Kurzformen "DD.MM.JJ" und "JJ-MM-DD" werden mit den fehlenden Zahlen für das Jahrhundert ergänzt und so in die lange Form gebracht.
    Dabei werden Jahreszahlen zwischen "00" und "19" immer dem 21. Jahrhundert zugeordnet und Zahlen zwischen "20" und "99" dem 20. Jahrhundert.
    Daten zwischen "1900" und "1919" sowie "2020" und "2099" werden also in das falsche Jahrhundert katapultiert!
  • DIN 1355 wird an das Ende des Dateinamens verschoben und in das Format "TT.MM.JJJJ" gebracht.
  • ISO 8601 wird an den Anfang des Namens verschoben und in das Format "YYYY-MM-DD" gebracht.
    Dies erscheint sinvoll, da nur die ISO-Norm bei Dateien auf dem PC eine Sortierung nach Datum erzeugt, wenn sie am Namensanfang steht.
Die unsichere Kurzform "DD.MM.JJ" bzw. "JJ-MM-DD" sollte bei Dateinamen keine Verwendung finden, da gerade bei Daten des 21. Jahrhunderts nicht erkennbar ist, welches der beiden Formate vorliegt.
Das Datum "030708" könnte z.B. "03.07.2008" oder "2003-07-08" meinen.

Die Buttons erkennen und konvertieren die folgenden Datumsformate:
  • DDMMJJ und YY-MM-DD auch ohne Trennzeichen
  • DDMMJJJJ und YYYYMMDD auch ohne Trennzeichen
  • DDMJJJJ; DMMJJJJ und DMJJJJ mit Trennzeichen
  • YYYYMMDD; YYYYMDD; YYYYMMD und YYYYMD mit Trennzeichen
Die Buttons verwenden eine VB-Script Umbenennen-Vorlage, die es ermöglicht mehrere reguläre Ausdrücke nacheinander abzuarbeiten (MultiRegExp.orp von leo aus dem englischen Forum):
http://resource.dopus.com/viewtopic.php?t=4677
Ich habe es etwas erweitert um z.B. doppelte Leerstellen, "%20" und Unterstriche zu entfernen und die Dateiendung in Kleinbuchstaben zu schreiben.
Dazu habe ich Teile der Vorlage "Titlecase.orp" von Steve verwendet:
http://resource.dopus.com/viewtopic.php?t=4677

Wer z.B. Unterstriche nicht entfernen möchte, kann im Script die Zeile "fUnderscore = True" suchen und auf "fUnderscore = False" setzen. Das entfernen doppelter Leerstellen (fMultiSpace = True) sollte man allerdings beibehalten.

Es ist auch möglich die Buttons so zu editieren, daß z.B. das Datum im Format ISO 9601 am Ende des Namens steht. Dazu muss man im Script die Zeilen mit "$"-Zeichen suchen (In VB-Script entsprich "$" der Bedeutung von "\" hinter "TO=" in einem DOpus Umbenennen Befehl) und deren Reihenfolge ändern.

Hier ein Beispiel:

Code: Alles auswählen

       ' Date Format: yyyy.mm.[0]d with various Separators
       re.Pattern = "(.*)(19[0-9][0-9]|20[0-1][0-9])([- ._,;])(1[012])\30?([1-9])(.*)"
       strNameOnly = re.Replace(strNameOnly, "$2-$4-0$5 $1 $6")

       ' Date Format: yyyy.mm.dd with various Separators
       re.Pattern = "(.*)(19[0-9][0-9]|20[0-1][0-9])([- ._,;])(1[012])\3([12][0-9]|3[01])(.*)"
       strNameOnly = re.Replace(strNameOnly, "$2-$4-$5 $1 $6")

Die Zeilen mit "re.Pattern =" enthalten die regulären Ausdrücke zur Datumserkennung.
Hier sollte auf keinen Fall etwas geändert werden!
Um das Datum im Format "YYYYMMDD" am Ende statt am Anfang des Dateinamens zu haben müssen die beiden Zeilenfolgen mit Dollarzeichen so lauten:
1) "$1 $6 $2-$4-0$5" (Die "0" vor dem "$5" muss erhalten bleiben, da sonst die Zahl für "Tag" nur einstellig angezeigt wird.)
2) "$2-$4-$5 $1 $6"
Dies muss im Script für alle 7 "Date Format:"-Einträge analog durchgeführt werden.
Durch Ersetzen der Bindestriche durch z.B. Unterstriche wird das Datum in das Format "YYYY_MM_DD" gebracht.

Download Menübutton "Datum konvertieren.dcf"
Dateianhänge
Datum konvertieren.zip
Menübutton "Datum konvertieren.dcf"
(2.42 KiB) 179-mal heruntergeladen

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste