Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Uhrzeit addieren (https://www.delphipraxis.net/187754-uhrzeit-addieren.html)

derklausi 30. Dez 2015 21:25

Datenbank: 1 • Version: 1 • Zugriff über: 1

Uhrzeit addieren
 
Hallo..

Eine Frage habe ich, in zwei Edit Feldern sollen je eine aktuelle Uhrzeit eingetragen werden (funktioniert) in einem weiteren Edit Feld soll nun die Differenz der zwei Zeiten eingetragen werden. Wie ist hier die formel?

Viele Grüsse

madas 30. Dez 2015 21:40

AW: Uhrzeit addieren
 
Schaue mal nach geeigneten Methoden in der Unit "DateUtils" nach.

mkinzler 30. Dez 2015 21:43

AW: Uhrzeit addieren
 
Beim TDateTime Typ handelt es sich um einen Double, wobei vor dem Komma die Tage seit dem 31.12.1899 und nach dem Komma die Millisekunden seit Mitternacht stehen.

Wenn Du einen Wert von dem anderen abziehst erhälst Du einen Double der die Tagesdifferent vor dem Komma und die Zeitdifferenz im Nachkommabereich enthält.

Perlsau 30. Dez 2015 21:58

Oder: Uhrzeiten Differenz ermitteln ganz ausführlich
 
Hier würde ich erst einmal die beiden Edit-Felder durch zwei Vcl.ComCtrls.TDateTimePicker ersetzen. Danach würde ich das Property Kind dieser beiden Komponenten auf dtkTime ändern, so daß nur Uhrzeiten eingegeben werden können. Benötigst du beides, also Uhrzeit und Datum, nimmst du vier DateTimePicker: jeweils zwei für das Datum und jeweils zwei für die Uhrzeit. Im Property DateTime steht immer das aktuelle Datum nebst Uhrzeit.

Um das komplette Datum zweier DateTimePicker zu ermitteln, benötigst du die Unit System.DateUtils. Dort findest du die beiden Funktionen DateOf und TimeOf: Erstere entfernt den Zeitanteil aus dem TDateTime-Wert, letztere den Datumsanteil. Beide Resultate zusammen ergeben dann das gewünschte Datum:
Delphi-Quellcode:
Function TForm1.GetDateTimeFromPickers(Const Picker_Datum, Picker_Zeit : TDateTimePicker) : TDateTime;
begin
  Result := System.DateUtils.DateOf(Picker_Datum.Date) +
            System.DateUtils.TimeOf(Picker_Zeit.Time);
end;
Damit kannst du nun das Datum der beiden DateTimePicker-Gruppen, die quasi das Start- und das Enddatum darstellen, ermitteln. Nun benötigst du noch den Wert, der die vergangene Zeit zwischen diesen beiden Datumswerten darstellt. In der bereits genannten Unit DateUtils gibt es diverse Between-Funktionen, die genau das tun: Sie liefern die zwischen zwei TDateTime-Werten liegende Zeit wahlweise in Millisekunden, Sekunden, Minuten, Stunden, Tagen, Wochen, Monaten oder Jahren zurück.

Diesen Wert schreibst du dann in das TEdit, in dem du das Ergebnis haben willst, oder auch in ein TLabel oder was auch immer.

Nachtrag:
  1. Dein Posting steht wohl im falschen Bereich, denn mit Datenbanken hat das erstmal nichts zu tun.
  2. Könntest du bei Gelegenheit deine Delphi-Version, mit der du arbeitest, in deinem Profil eintragen? Das wäre unter Umständen hilfreich beim Versuch, dir weiterzuhelfen.
  3. Differenzen zwischen zwei Werten zu ermitteln nennt man Subtrahieren, Addieren dagegen bezeichnet den Vorgang, um die Summe zu berechnen.

Der schöne Günther 31. Dez 2015 09:35

AW: Uhrzeit addieren
 
Zitat:

Zitat von mkinzler (Beitrag 1325670)
Wenn Du einen Wert von dem anderen abziehst erhälst Du einen Double der die Tagesdifferent vor dem Komma und die Zeitdifferenz im Nachkommabereich enthält.

Warum der Aufwand mit Kommazahlen? TTimeSpan hat alles was man braucht:

Delphi-Quellcode:
uses System.TimeSpan;

procedure justTimeSpanThings();
var
   fromDate, toDate: TDateTime;
   timeSpan: TTimeSpan;
begin
   fromDate := EncodeDate(1945, 12, 24);
   toDate := EncodeDate(2015, 12, 28);

   timeSpan := TTimeSpan.Subtract(toDate, fromDate);
   ShowMessageFmt('Das waren %.0f Tage', [timeSpan.TotalDays]);
end;

Mavarik 31. Dez 2015 09:54

AW: Uhrzeit addieren
 
Zitat:

Zitat von derklausi (Beitrag 1325668)
Hallo..

Eine Frage habe ich, in zwei Edit Feldern sollen je eine aktuelle Uhrzeit eingetragen werden (funktioniert) in einem weiteren Edit Feld soll nun die Differenz der zwei Zeiten eingetragen werden. Wie ist hier die formel?

Viele Grüsse

Formel? Ich gehe nicht davon aus, dass Du nicht Stunden in Minuten + Minuten umrechnen kannst...

Fragst Du nach der SQL Anweisung? Oder warum hast Du es unter Datenbanken gepostet?

derklausi 1. Jan 2016 22:03

AW: Uhrzeit addieren
 
Hallo,

ich habe noch eine Frage.

Ich habe einige Tedit Felder die mit meinem DBGrid verbunden sind, trage ich in einige Felder etwas ein und Speichere es wird es auch im DBGrid hinterlegt, nun habe ich aber noch 3 Tedit felder in denen die Uhrzeiten stehen die über Button Click abgerufen werden, diese werde auch angezeigt, wenn ich nun aber in ein anderen Feld etwas eingebe verschwindet die Uhrzeit.

Grüße

blawen 2. Jan 2016 01:04

AW: Uhrzeit addieren
 
Zitat:

Zitat von derklausi (Beitrag 1325817)
...wenn ich nun aber in ein anderen Feld etwas eingebe verschwindet die Uhrzeit.

Ich verstehe eigentlich nur Bahnhof ;-)

Wenn es verschwindet, wirst Du es entsprechend so programmiert haben - aber ohne Deinen Code zu kennen, wird es schwierig sein, einen konkreten Tipp zu geben.

Perlsau 2. Jan 2016 07:08

AW: Uhrzeit addieren
 
Zitat:

Zitat von derklausi (Beitrag 1325817)
Hallo, ich habe noch eine Frage.

Wurde denn deine ursprüngliche Frage so beantwortet, daß du zu einer Lösung gelangt bist?
Wenn ja, wie sieht diese Lösung aus?

Zitat:

Zitat von derklausi (Beitrag 1325817)
Ich habe einige Tedit Felder die mit meinem DBGrid verbunden sind, trage ich in einige Felder etwas ein und Speichere es wird es auch im DBGrid hinterlegt, nun habe ich aber noch 3 Tedit felder in denen die Uhrzeiten stehen die über Button Click abgerufen werden, diese werde auch angezeigt, wenn ich nun aber in ein anderen Feld etwas eingebe verschwindet die Uhrzeit.

Gewöhnlich gilt hier die Regel: Neue Frage, neuer Thread. Das bedeutet, du solltest für jede Frage ein neues Thema erstellen. Auf diese Weise kann das Forum über die interne Suche auch als Nachschlagewerk verwendet werden.

Wie Blawen bereits richtig anmerkte, ist es ohne deinen Code nicht möglich, zu erkennen, was du falsch gemacht hast.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:12 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