String auf Datum prüfen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

String auf Datum prüfen

Beitrag von monta »

Ein simples Problem, wie kann man einen String daraufhin überprüfen, ob er ein gültiges Datum enthält?

Ich weiß, das es TryDateToStr gibt, das Problem ist aber, das diese Funktion versucht, immer ein gültiges Datum draus zu basteln, wenn ich 23.03 übergebe erhalte ich bspw. 23.03.2009 als Datum und ein true. Übergebe ich 1.12.333322222 so erhalte ich als Datum 1.12.3333.

Aber genau das will ich ja nicht, sondern in diesen Fällen hätte ich gerne False und nicht ein irgendwie geratenes Datum und als Rückgabe true.
Johannes

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: String auf Datum prüfen

Beitrag von Scotty »

Hin- und wieder zurück konvertieren? Der Vergleich wäre dann das Ergebnis.

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: String auf Datum prüfen

Beitrag von monta »

Danke!

Manchmal sieht man halt den Wald vor Bäumen nicht. Mit Vergleich funktioniert es bestens.

Code: Alles auswählen

function StringIsDate(const Date: string): boolean;
var Datum: TDateTime;
begin
  if TryStrToDate(Date, Datum)  then
    Result := (Date = DateToStr(Datum));
  else
    Result := false;
end;
Johannes

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: String auf Datum prüfen

Beitrag von Hitman »

Also eleganter fände ich da ..... RegEx ;-)

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: String auf Datum prüfen

Beitrag von Socke »

Unter Delphi 7 bauten die ganzen Funktionen für Zeit/String-Konvertierung noch auf den Formatstrings auf. Unter FPC ist das ja ein wenig anders geregelt. Wenn du also ein festes Format hast (Achtung: verschiedene Sprachen haben verschiedene Formate) könntest du evtl. dort fündig werden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

marcov
Beiträge: 1104
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: String auf Datum prüfen

Beitrag von marcov »

Hitman hat geschrieben:Also eleganter fände ich da ..... RegEx ;-)
Regex are nie elegant.

scandatetime raises Exceptions when das Input string falsch ist:

http://www.freepascal.org/docs-html/rtl ... etime.html" onclick="window.open(this.href);return false;

Benutzeravatar
theo
Beiträge: 11005
Registriert: Mo 11. Sep 2006, 19:01

Re: String auf Datum prüfen

Beitrag von theo »

marcov hat geschrieben: Regex are nie elegant.
Bravo, endlich sagt's mal einer. :D

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: String auf Datum prüfen

Beitrag von Hitman »

Ich sagte auch nur "eleganter" ;) Besser als zweimal hin- und herkonvertieren wäre es allemal.

Benutzeravatar
theo
Beiträge: 11005
Registriert: Mo 11. Sep 2006, 19:01

Re: String auf Datum prüfen

Beitrag von theo »

Kann deine RegEx mit dem 31. Februar umgehen?
http://www.stupidedia.org/stupi/31._Februar" onclick="window.open(this.href);return false;

:wink:

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: String auf Datum prüfen

Beitrag von monta »

Jaja, ihr mit euren RegEx ;)

ob das wirklich schneller ist, als zweimal zu konvertieren wäre aber noch festzustellen.

Aber egal, ScanDateTime sieht doch schonmal sehr gut aus, mit einem klaren EConvertError, denn man abfangen kann ohne das irgendwelche Daten geraten werden, wie bei TryStringToDate. Das sollte mein Problem auch lösen, danke.
Johannes

marcov
Beiträge: 1104
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: String auf Datum prüfen

Beitrag von marcov »

Hitman hat geschrieben:Ich sagte auch nur "eleganter" ;) Besser als zweimal hin- und herkonvertieren wäre es allemal.
Nein. Das ist ima noch immer eleganter als einen interpreter inlinken.

Antworten