Delphi-PRAXiS
Seite 1 von 3  1 23      

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/)
-   -   TDate enthält Uhrzeit? (https://www.delphipraxis.net/170064-tdate-enthaelt-uhrzeit.html)

bwolf 29. Aug 2012 09:39

TDate enthält Uhrzeit?
 
Hi Leute,

ich habe eine Prozedur mit einem Parameter TDate.
Dieser Prozedur übergebe ich einen TDateTime Wert.
Wenn ich nun innerhalb dieser Prozedur den TDate-Wert im Debugger anschaue, enthält dieser immernoch den Uhrzeit-Anzeil - warum ist das so?
Wenn TDate auch die Uhrzeit entält, warum gibt es dann TDate und TDateTime?

DeddyH 29. Aug 2012 09:42

AW: TDate enthält Uhrzeit?
 
Es gibt auch noch TTime, aber alle 3 sind vom Typ double.

Lemmy 29. Aug 2012 09:42

AW: TDate enthält Uhrzeit?
 
Schau mal an wie TDate definiert ist:

Delphi-Quellcode:
TDate = type TDateTime;
das ist also nur ein Alias von TDateTime. Und die Datums- und Zeittypen sind letztlich Doubles:

Delphi-Quellcode:
  TDateTime = type Double;
wobei die Zahl vor dem Komma die Tage und das nach dem Komma die Uhrzeit des angegebenen Tages darstellt.

Grüße

s.h.a.r.k 29. Aug 2012 09:42

AW: TDate enthält Uhrzeit?
 
Ich denke, dass es Vollständigkeithalber der Fall ist. TDate und TDateTime sind beide vom Typ Extended und enhalten eben auch die Zeit. Bei TDate wird aber dann wohl nur die Nachkommastelle nicht einfach abgeschnitten, sondern beibehalten. Wäre ja sonst jedes Mal ein Mehraufwand das abzuschneiden. Was jedenfalls hinter dem Komma steht ist für Methoden, die mit TDate arbeiten dann egal, denn es ist ja nur das Datum interessant und dafür sind die Stellen für dem Komma gedacht.

bwolf 29. Aug 2012 09:46

AW: TDate enthält Uhrzeit?
 
Danke für die schnellen Antworten.
Sinnig finde ich das ganze aber nicht. Wenn ich schon explizit TDate verwende, will ich wohl auch nur das Datum haben.
Ansonsten Kann ich auch immer TDateTime verwenden wenn ich mir dann eh mit Trunc nur das Datum rausholen muss.

Daniel 29. Aug 2012 09:53

AW: TDate enthält Uhrzeit?
 
Es gibt sonst auch noch die Funktion
Delphi-Quellcode:
DateOf()
. Macht nix anderes als Trunc(), verbessert aber (in meinen Augen) die Lesbarkeit des Codes, weil der Funktionsname sprechender ist.

mkinzler 29. Aug 2012 09:53

AW: TDate enthält Uhrzeit?
 
da der Typ der selbe ist, müsste der Trunc bei jedem Schriebzugriff durchgeführt werden, und nicht nur wenn die Nachkommastelln stören

Bernhard Geyer 29. Aug 2012 09:54

AW: TDate enthält Uhrzeit?
 
TDate(time) basiert auf as Windows OLE DateTime-Format:

http://www.fxcodebase.com/documents/...p/oledate.html

himitsu 29. Aug 2012 10:59

AW: TDate enthält Uhrzeit?
 
Wie schon erwähnt wurde, sind diese 3 Typen (TDateTime, TDate und TTime) intern nur Double, welche Datum und Uhrzeit enthalten können.
Diese Typen besitzen untereinander (leider) keine Konvertierungsfunktionen, welche z.B. Datum oder Zeit entfernen.
Es sind also reine Informationstypen, welche dem "Programmierer" mitteilen welche Inhalte er dafür vorgesehn hat, aber es mußt nicht nur das darin enthalten sein.

Delphi-Referenz durchsuchenTrunc/Delphi-Referenz durchsuchenDateOf oder Delphi-Referenz durchsuchenFrac/Delphi-Referenz durchsuchenTimeOf wurden nun auch schon genannt.

PS: Es gibt auch den atTimePciker, welcher Property ala .Date und .Time enthält, wo man auch glatt vergessen hatte (weiß jetzt nicht ob's inzwischen mal behoben wurde) darin auf diese Zeitbereiche einzuschränken, so daß man bei .Time auch das Date mit drin hatte. :wall:


Was man machen könnte, wären eigene Typen für die Date/Time-Behandlung (ein Double/TDateTime in einem Record), wo über Operatoren entsprechende Umwandlungen und Fehlermeldungen (z.B. beim Versuch einen TTime an einen TDate zuzuweisen) implementiert sind.

Oder man nutzt die schon fertigen Typen wie z.B.
Delphi-Quellcode:
TTimeSpan
.

Uwe Raabe 29. Aug 2012 11:30

AW: TDate enthält Uhrzeit?
 
Es gibt schon einen Unterschied. Deklariert man eine Methode á la
Delphi-Quellcode:
(var: Value: TDate)
, so kann man keinen TDateTime als Parameter übergeben, da die Typen nicht übereinstimmen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:07 Uhr.
Seite 1 von 3  1 23      

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