Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Checken ob ein String wie TDate ist (https://www.delphipraxis.net/70960-checken-ob-ein-string-wie-tdate-ist.html)

Daether 7. Jun 2006 11:27


Checken ob ein String wie TDate ist
 
Hi,
ich versuche momentan einen TerminKalender zu erstellen (einen einfachen). Ich habe ein Stringgrid in dem ich 3 Spalten habe für Datum, Uhrzeit und die Meldung.
Wenn nun diese Daten gespeichert werden, möchte ich, dass überprüft wird ob die Strings in der Datumsreihe ein Datum sind und die Strings in den Uhrzeitspalten auch einer Uhrzeit entsprechen.

Ein zweites Problem, dass ich habe, ist, dass ich nicht genau weiß, wie ich abfragen kann ob ein Datum, bzw. eine Uhrzeit schon "vorbei" ist. Also ob der 07.06.2006 schon war, ist oder kommt, gemessen an der Systemuhr.
MfG Daether

mkinzler 7. Jun 2006 11:32

Re: Checken ob ein String wie TDate ist
 
tryStrToDate()

Martin K 7. Jun 2006 11:34

Re: Checken ob ein String wie TDate ist
 
Zitat:

Zitat von Daether
Ein zweites Problem, dass ich habe, ist, dass ich nicht genau weiß, wie ich abfragen kann ob ein Datum, bzw. eine Uhrzeit schon "vorbei" ist. Also ob der 07.06.2006 schon war, ist oder kommt, gemessen an der Systemuhr.
MfG Daether

Ich denke mal, das müsste so gehen:
Delphi-Quellcode:
var Zeit, Datum: String;
{...}

//Datum:
if StrToDate(Datum) = Date then
  ShowMessage('Heute!')
else
if StrToDate(Datum) < Date then
  ShowMessage('Schon vorbei!')
else
  ShowMessage('Kommt noch!');

//Zeit:
if StrToTime(Zeit) = GetTime then
  ShowMessage('Jetzt!')
else
if StrToTime(Zeit) < GetTime then
  ShowMessage('Schon vorbei!')
else
  ShowMessage('Kommt noch!');

//Edit:
Code verbessert!
Dann klappt's auch mit dem aktuellen Tag!


//Edit2:
Code vervollständigt mit Datum und Zeit!

Daether 8. Jun 2006 08:30

Re: Checken ob ein String wie TDate ist
 
hi nochmal
das Prinzip verstehe ich dahinter nur verstehe ich nicht ganz wie ich GetTime erzeuge, bzw. deklariere.

Edit:
Date hat sich erledigt, das war einfach, nur verstehe ich weiterhin nicht wie ich das mit GetTime mache.

SirThornberry 8. Jun 2006 08:44

Re: Checken ob ein String wie TDate ist
 
GetTime? Zum ermitteln der aktuellen Zeit gibt es die Funktion "Time()" und zum ermitteln des Datums die Funktion "Date()".

Im übrigen sollte man 2 Datumswerte nicht mit "=" vergleichen weil Datumswerte Float-Werte sind und da kann es durchaus passieren das die Floatwerte verschieden sind aber trotzdem das gleiche Datum darstellen.

Martin K 8. Jun 2006 15:36

Re: Checken ob ein String wie TDate ist
 
Ob man Time oder GetTime für die aktuelle Uhrzeit verwendet, ist eigentlich egal.
Ich habe mich nur für GetTime entschieden, weil:
Zitat:

Zitat von Delphi-Hilfe
Delphi-Syntax:

function Time: TDateTime;
function GetTime: TDateTime;

Beschreibung

Time und GetTime geben die aktuelle Uhrzeit als Wert des Typs TDateTime zurück. Die beiden Funktionen sind vollständig identisch.

Hinweis: Time führt zu einem Konlikt mit der gleichnamigen Xlib-Funktion. Verwenden Sie deshalb in Linux- und plattformübergreifendem Code GetTime.


Zitat:

Zitat von SirThornberry
Im übrigen sollte man 2 Datumswerte nicht mit "=" vergleichen weil Datumswerte Float-Werte sind und da kann es durchaus passieren das die Floatwerte verschieden sind aber trotzdem das gleiche Datum darstellen.

Hm...
Ich dachte, gleiches Datum = gleicher Float-Wert.
Aber wie überprüft man denn sonst, ob zwei Datumsangaben identisch sind ?

TBx 8. Jun 2006 15:55

Re: Checken ob ein String wie TDate ist
 
Zitat:

Ich dachte, gleiches Datum = gleicher Float-Wert.
Aber wie überprüft man denn sonst, ob zwei Datumsangaben identisch sind ?
nicht ganz.
Bei gleichem Datum sind die Ganzzahligen Anteile gleich, also alles, was vor dem Dezimalkomma steht.

Der Vergleich ist dann einfach:
Delphi-Quellcode:
if trunc (Date1) = trunc (Date2) then
  showmessage ('Datum identisch!');
Älteres oder jüngeres Datum bekommt man analog dazu.

Hope it helps

onlinekater

Martin K 8. Jun 2006 16:02

Re: Checken ob ein String wie TDate ist
 
Zitat:

Zitat von onlinekater
Bei gleichem Datum sind die Ganzzahligen Anteile gleich, also alles, was vor dem Dezimalkomma steht.

Ja, das ist mir schon klar.

Deswegen habe ich ja auch deisen Code:
Delphi-Quellcode:
if StrToDate(Datum) = Date then
Denn StrToDate liefert NUR das Datum (ohne Zeit, also Zeit = 0:00) zurück, genauso wie die Funktion Date auch NUR das aktuelle Datum ohne die Zeitangabe zurückliefert.
Beides also ganze Zahlen :wink:

Da brauch man dann auch kein trunc mehr :!:

TBx 8. Jun 2006 16:09

Re: Checken ob ein String wie TDate ist
 
@Martin K: Deine Vorgehensweise des Vergleiches von StrToDate und Date ist schon ok, nur die Aussage
Zitat:

gleiches Datum = gleicher Floatwert
ist nicht korrekt, denn es gibt durchaus verschiedenen Floatwerte, die zum selben Datum passen.

Ich denke, das war ein allgemeiner Hinweis vonSir Thornberry.

btw die Aussage aus gleichen Floatwerten folgt gleiches Datum ist dagenen 100%ig richtig
Gruß

onlinekater

Martin K 8. Jun 2006 16:19

Re: Checken ob ein String wie TDate ist
 
Zitat:

Zitat von onlinekater
@Martin K: Deine Vorgehensweise des Vergleiches von StrToDate und Date ist schon ok, nur die Aussage
Zitat:

gleiches Datum = gleicher Floatwert
ist nicht korrekt, denn es gibt durchaus verschiedenen Floatwerte, die zum selben Datum passen.

Na gut, ich geb's ja zu.
Allgemein ist die Aussage nicht richtig.

Aber
Zitat:

Zitat von onlinekater
Ich denke, das war ein allgemeiner Hinweis vonSir Thornberry.

das denke ich nicht, da die Aussage sich auf meinen Code bezogen hat (dachte ich zumindest):
Zitat:

Zitat von SirThornberry
Im übrigen sollte man 2 Datumswerte nicht mit "=" vergleichen weil Datumswerte Float-Werte sind und da kann es durchaus passieren das die Floatwerte verschieden sind aber trotzdem das gleiche Datum darstellen.

Also nach wie vor, als Antowort auf die Problemstellung aus dem ersten Beitrag:
Zitat:

Zitat von Daether
Ein zweites Problem, dass ich habe, ist, dass ich nicht genau weiß, wie ich abfragen kann ob ein Datum, bzw. eine Uhrzeit schon "vorbei" ist. Also ob der 07.06.2006 schon war, ist oder kommt, gemessen an der Systemuhr.
MfG Daether

ist mein Code aus Beitrag #3 die Lösung.
Habe diesen Code mit mehreren Zeitwerten bzw. Datumswerten getestet und es funktioniert!

Ich möchte nur noch darauf hinweisen, dass die Überprüfung auf die aktuelle Uhrzeit nur für eine Sekunde pro Tag erfüllt ist,
wobei die Überprüfung auf das aktuelle Datum für einen ganzen Tag erfüllt ist.
So war es ja auch von Daether gedacht, nehme ich mal an.

MfG,
Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz