Delphi: Wie TDatetime Wert zu bestimmen und zu leeren

9

Es scheint, dass es keine Möglichkeit gibt, NULL (entweder einen <<> nicht zugewiesenen Wert " TDateTime Variablen zuzuweisen.

)

Der einzige Weg, den ich mir vorgestellt habe, ist, so etwas zu benutzen:

%Vor%

Gibt es jemanden, der eine bessere Lösung kennt, was nicht mit 0 Datumswert überlappt?

Sind negative TDateTime-Werte gefährlich? (Als eine fähige Ressource für frühere Zwecke)

    
xsubira 20.02.2013, 16:33
quelle

4 Antworten

9

Wie Andreas bereits geschrieben hat, ist der TDateTime -Typ tatsächlich double und somit nicht "nullbar". Ich benutze

%Vor%

für einen leeren Datumswert, da dies ein unmögliches Datum von 00/00/0000 darstellt. Aber zum Beispiel verwendet DevExpress

%Vor%

Es scheint also kein vereinbartes Standardvale zu geben, Sie sollten sich für eines entscheiden, das Ihren Bedürfnissen entspricht.

    
ain 20.02.2013, 16:44
quelle
9

Zuerst müssen Sie definieren, was Sie mit 'ein leerer TDateTime Wert' meinen.

Ein TDateTime -Wert ist ein Double mit dem Datum, das im ganzzahligen Teil codiert ist, und der Zeit, die im Bruchteil codiert ist. Das nächste, was einem 'Nulldatum' am nächsten kommt, ist wahrscheinlich 0 .

Testen Sie einfach ADate <> 0 , um zu testen, ob das Datum 'null' ist.

Aber Vorsicht: Wenn Sie eine TDateTime lokale Variable deklarieren, dann ist dies nicht notwendigerweise =0 , bevor Sie einen Wert angeben. Es kann alles sein. Das Gleiche gilt natürlich auch für Variablen vom Typ integer , double , boolean , ...

Ich glaube auch, dass ein TDateTime mit dem Wert 0 das Datum 1899-12-30 codiert.

Schließlich sind negative TDateTime -Werte vollkommen normal. Zum Beispiel entspricht -5000 1886-04-22 .

Ich verstehe den Code nicht richtig. Wenn Sie 0 als 'nicht zugewiesenen' Wert verwenden möchten (was schlecht ist, wenn Sie an Daten in der Nähe von 1899-12-30 interessiert sind), warum tun Sie nicht einfach

%Vor%

oder möglicherweise (aber nicht äquivalent!),

%Vor%

In seiner Antwort gab ain einige vernünftigere Wahlmöglichkeiten für den Wert "nicht zugewiesener Termin".

    
Andreas Rejbrand 20.02.2013 16:35
quelle
1

tDateTime ist für die Werte zwischen 0 und -1 undefiniert, was bedeutet, dass eine tDateTime von -0.5 ein undefinierter Wert und nützlich für ein Nulldatum als Alternative zu NaN ist. DateTimeToString wird -0.5 genauso anzeigen wie +0,5;

    
John Hillier 03.02.2016 14:44
quelle
1

Verwenden Sie PDateTime anstelle von TDateTime und senden Sie als Nullwert. Wenn kein Zeiger auf Wert ist, wird kein Wert ausgegeben.

Um den Wert zu überprüfen, verwenden Sie Assigned ptr:

%Vor%     
Eugene.LatDev 24.07.2015 12:03
quelle