AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Universeller DateTime Converter
Thema durchsuchen
Ansicht
Themen-Optionen

Universeller DateTime Converter

Ein Thema von bekrause · begonnen am 6. Sep 2015 · letzter Beitrag vom 9. Sep 2015
Antwort Antwort
bekrause

Registriert seit: 31. Mär 2003
Ort: Essen
24 Beiträge
 
Delphi XE Professional
 
#1

Universeller DateTime Converter

  Alt 6. Sep 2015, 20:32
Hallo zusammen,

ich schreibe derzeit an einem Parser mit integrierter Textanalyse. Dieser Parser soll auch automatisch Datumsangaben extrahieren können. Dass klappt auch schon ganz gut.

Jetzt sollen die Daten jedoch nicht nur analysiert , sondern auch normalisiert werden. Das bedeutet, dass erkannte Format soll vereinheitlicht werden. Intern soll es also als TDateTime gespeichert werden.

Das Umwandeln von bekannten Datumsstrings ist relativ einfach. Der Ideenvielfalt an Datums- und Zeitangaben allein im Deutsch- und Englischsprachigem Raum ist jedoch keine Grenze gesetzt.

Ich habe teilweise Datumsangaben wie z.B. "Mo, Apr 14 2014, 11:15 am"

Bevor ich mich jetzt ransetze und für die verschiedenen Zeit und Datumsangaben Konverter schreibe, wollte ich mich mal umhören, ob es so etwas bereits irgendwo gibt.

Im Prinzip suche ich eine etwas ausgefeiltere Variante von StrToDateTime, oder VarToDateTime. Die beiden reichen leider nicht aus.

Ich bin auch nicht auf eine Delphi Klasse fixiert. Ich würde auch eine DLL nehmen. Es darf auch gerne etwas kosten.

Gruß Benno
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Universeller DateTime Converter

  Alt 6. Sep 2015, 23:23
Würde mal schätzen, no chance. Alleine vom Datum her: das Format (Syntax, DateSeparator, die Reihenfolge von Day, Month, und Year ect.) müssen bekannt sein. Und bei der Zeitangabe, woher soll der Parser wissen, was zum Beispiel am bedeutet. Das deutsche Wort am oder als Zeitangabe ante meridiem. Ect..
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Universeller DateTime Converter

  Alt 6. Sep 2015, 23:57
Um den Aufwand bzw. die Machbarkeit zu bestimmen benötigt man eine Liste mit allen möglichen Darstellungen die erkannt werden sollen und was dabei erkannt werden soll.

Daraus baut man sich zunächst einen Unittest mit dem dann mögliche Kandidaten getestet werden.

Meistens reduziert sich das Problem nach dieser Aufstellung

BTW: Als Test-Zeitpunkt eignet sich hervorragend z.B. 01.02.2003 04:05:06
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 7. Sep 2015 um 00:06 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: Universeller DateTime Converter

  Alt 7. Sep 2015, 07:29
Es könnte auch nicht schaden, redundante Angaben, wie z.B. den Wochentag, zu entfernen. Danach ergibt sich bestimmt ein Bild
ich schreibe derzeit an einem Parser mit integrierter Textanalyse.
Wo ist (hier) der Unterschied zwischen einem Parser und einer Textanalyse?
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Universeller DateTime Converter

  Alt 7. Sep 2015, 09:23
Ist m.E. ohne Angabe des Formats nicht möglich. Was soll zum Beispiel 01.02.03 sein? 1.2.2003, 3.2.2001, 1 Uhr 2 und 3 sec. ect..
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Universeller DateTime Converter

  Alt 7. Sep 2015, 09:27
Ist m.E. ohne Angabe des Formats nicht möglich. Was soll zum Beispiel 01.02.03 sein? 1.2.2003, 3.2.2001, 1 Uhr 2 und 3 sec. ect..
Wir nähern uns der Schwierigkeit dieses Unterfangens

Genau aus dem Grund soll man ja auch so eine Liste erstellen, was man reinschickt und was man als Ausgabe erwartet. Irgendwann kommt man an einen Punkt, wo es unlösbar wird, oder nur unter ganz bestimmten Bedingungen/Vorgaben lösbar wird. Dann werden einem auch die Grenzen klar.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Universeller DateTime Converter

  Alt 7. Sep 2015, 11:02
Ei, hann ich doch schonn in #2 geschrieb.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#8

AW: Universeller DateTime Converter

  Alt 8. Sep 2015, 18:34
Das kann man doch sicher irgendwie in RegEx lösen, alles relativ gleich strukturiert ...
Wo sind die Experten und Gurus (ich kanns nämlich nicht aus dem Stand )

Rollo
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#9

AW: Universeller DateTime Converter

  Alt 8. Sep 2015, 19:52
Ich habe teilweise Datumsangaben wie z.B. "Mo, Apr 14 2014, 11:15 am"
Gruß Benno
Wenn man so etwas wie oben mit normalem menschlichen Verstand in ein anderes Format umsetzen kann, dann kann man auch einen Parser dafür schreiben.
Zusätzliche Angaben, wie z.B. der Wochentag, können als Plausibilitätsprüfung dienen.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#10

AW: Universeller DateTime Converter

  Alt 9. Sep 2015, 08:16
Also, eine Heuristik kann man schon schreiben. Wie Rufo schon schrieb:
  1. Was soll das Teil erkennen können? Also: Erstellen einer Tabelle mit : Eingabe und erwarteter Ausgabe. Zunächst nur unterschiedliche Kategorien, also z.B. 'DD.MM.YY' und 'DD.MMM.YY' und 'MMM DD YY' etc.
  2. Schreiben der Unittests. Und zwar für jede Kategorie einen
  3. For unitTest in UnitTests do WriteCodeThatPasses(unitTest);
  4. Erweitern der Liste unter (1) für alle Monate, Wochentage etc. also alle Kongurenzklassen.
So. Da ich jetzt auch schon Beiträge wiederhole... Ist vielleicht alles gesagt?

PS: RegEx kann man natürlich z.T. auch verwenden.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz