Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TDate und TTime zu TDateTime wandeln (https://www.delphipraxis.net/200367-tdate-und-ttime-zu-tdatetime-wandeln.html)

Bünni 14. Apr 2019 09:02


TDate und TTime zu TDateTime wandeln
 
Vielleicht zuviel Kaffee getrunken oder zu wenig geschlafen. Oder es fehlt an Erfahrung mit dem Umgang mit Datumswerten?
Zur Auswahl stehen ein Datum TDate und eine Uhrzeit TTime. Wie erzeugt man aus dieser Kombination einen neuen TDateTime, egal welcher Datums- und Uhrzeitformatierung ein System eingstellt hat?

Als Notlösung mache ich das so
Delphi-Quellcode:
 FS := FormatSettingsCreateEx(',', '.', ':', '/'); // meine eigene Funktion, damit es kürzer wird

 DT := StrToDateTime( FormatDateTime('dd/mm/yyyy', Date, FS) + ' ' + TimeToStr(Time, FS), FS) );

mkinzler 14. Apr 2019 09:14

AW: TDate und TTime zu TDateTime wandeln
 
Theoretisch
Delphi-Quellcode:
<DateTime> := <Date> + <Time>;
Um sicher zu Gehen:
Delphi-Quellcode:
<DateTime> := Trunc(<Date>) + Frac(<Time>);

Bünni 14. Apr 2019 09:16

AW: TDate und TTime zu TDateTime wandeln
 
Funktioniert wie geschmiert.
Ich hatte zuerst Ausschau nach einem Typen gehalten, dem man ein TDate sowie TTime zuweisen kann aber den scheint es leider nicht zu geben.

Funktioniert aber auch so wie von dir beschrieben sehr gut auf die Sekunde genau.

Delphi-Quellcode:
DT := Trunc(System.SysUtils.Date) + Frac(System.SysUtils.Time);

mkinzler 14. Apr 2019 09:18

AW: TDate und TTime zu TDateTime wandeln
 
Zitat:

Ich hatte zuerst Ausschau nach einem Typen gehalten, dem man ein TDate sowie TTime zuweisen kann aber den scheint es leider nicht zu geben.
Doch TDateTime.

Bünni 14. Apr 2019 09:21

AW: TDate und TTime zu TDateTime wandeln
 
So meinte ich das. Hätte gleich ein Beispiel dranhängen sollen.

Delphi-Quellcode:
 DT.Date := System.SysUtils.Date;
 DT.Time := System.SysUtils.Time;
Der scheint durch die simple Addition von TDate (Tag N, Uhrzeit 00:00:00) und TTime aber wohl überflüssig zu sein.

Delphi.Narium 14. Apr 2019 10:02

AW: TDate und TTime zu TDateTime wandeln
 
DateTime ist eine Gleitkommazahl.

Date ist eine Gleitkommazahl, bei der der Nachkommaanteil = 0 ist.
Time ist eine Gleitkommazahl, bei der der Vorkommaanteil = 0 ist.

Vor dem Komma steht also sowohl bei Date, als auch bei DateTime das Datum, hinter dem Komma stehen bei DateTime und Time die Uhrzeit.

Date := Trunc(DateTime)
Time := Frac(DateTime)

HeutigesDatum := Trunc(Now)
AktuelleUhrzeit := Frac(Now)

Now := HeutigesDatum + AktuelleUhrzeit

DieDolly 14. Apr 2019 10:15

AW: TDate und TTime zu TDateTime wandeln
 
Sehr ausführliche und verständliche Erklärung.
Sowas habe ich letztens auch gesucht und hier gefunden. Zeitkonvertierungen sind alles andere als einfach für mich. Für andere wie euch ein Klacks 8-)
Aber zum Glück gibt es noch Leute die genau so wenig Ahnung haben wie ich und so einfache Fragen stellen. SOLANGE es nicht ist wie man erkennt ob eine Zahn negativ ist ist alles OK.
Hier gibts ähnlichen Lesestoff https://www.delphipraxis.net/199740-...umsformat.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:38 Uhr.

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