String auf Datum prüfen
-
- 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
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.
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
-
- 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
Hin- und wieder zurück konvertieren? Der Vergleich wäre dann das Ergebnis.
-
- 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
Danke!
Manchmal sieht man halt den Wald vor Bäumen nicht. Mit Vergleich funktioniert es bestens.
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
-
- 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
Also eleganter fände ich da ..... RegEx 

-
- 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
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
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- 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
Regex are nie elegant.Hitman hat geschrieben:Also eleganter fände ich da ..... RegEx
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;
Re: String auf Datum prüfen
Bravo, endlich sagt's mal einer.marcov hat geschrieben: Regex are nie elegant.

-
- 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
Ich sagte auch nur "eleganter"
Besser als zweimal hin- und herkonvertieren wäre es allemal.

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

http://www.stupidedia.org/stupi/31._Februar" onclick="window.open(this.href);return false;

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

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
-
- 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
Nein. Das ist ima noch immer eleganter als einen interpreter inlinken.Hitman hat geschrieben:Ich sagte auch nur "eleganter"Besser als zweimal hin- und herkonvertieren wäre es allemal.