AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Zeit dazu addieren

Ein Thema von FunThomas · begonnen am 14. Dez 2021 · letzter Beitrag vom 4. Jan 2022
Antwort Antwort
Seite 1 von 2  1 2   
FunThomas

Registriert seit: 15. Jul 2008
10 Beiträge
 
#1

Zeit dazu addieren

  Alt 14. Dez 2021, 13:22
Hallo Allerseits,

ich quäle mich jetzt seit einer Weile mit TDateTime und TTimeStamp rum aber werde nicht so recht glücklich.
Ich möchte mir eine GUI bauen die ein Diagramm anzeigt mit Zahlenwerten die entsprechend des Zeitpunktes geordnet sind.
Jetzt dachte ich mir ich kann ja mit Mouseover die Postionen holen und würde dann gern entsprechend der Koordinaten mir meine Zeit und den Wert berechnen (oder den nächsten aus der Werteliste) raussuchen und in einem extra Edit anzeigen lassen.

Primär geht es mir nur um die Zeitberechnung, ich habe eine TDateTime Startzeit (entspricht X=0), meine Koordinate in X Richtung (vom Mouseover) und einer Konstante PixelPerSecond.

Ich dachte mir am einfachsten ist es mit einem TTimeStamp den ich anlege und weise dann einfach der Time den Wert an Milisekunden zu:
Code:
var
  Diff_TS  : tTimeStamp;
  Zeit_diff : TDateTime;

  Diff_TS.Time := Round (X * PixelPerSecond) * 1000;
  Zeit_diff   := TimeStampToDateTime(Diff_TS);
Leider bin ich damit am 01.11.4662

Gibt es einen einfachen Weg um zu einem TDateTime eine gewisse Anzahl an Sekunden zu addieren, welches auch dann Datumsübergreifend funktioniert?

Danke im Voraus,
Thomas
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.400 Beiträge
 
Delphi 7 Professional
 
#2

AW: Zeit dazu addieren

  Alt 14. Dez 2021, 13:42
TDateiTime ist einfach nur eine Zahl, bei der der Vorkommaanteil die Anzahl der Tage angibt, der Nachkommaanteil die Teile eines Tages.

TDateTime = 1 -> 1 Tag.

1 Tag = 60 Sekunden * 60 Minuten * 24 Stunden = 86400 Sekunden.

1 / 86400 = 1,1574074074074074074074074074074e-5.

Wenn Du die Anzahl der Sekunden weißt, dann rechnest Du einfach Anzahlsekunden * 1 / 86400.

Durch Addition oder Subtraktion kannst Du dann eine um die Anzahl Sekunden in der Zukunft liegenden bzw. einen in der Vergangenheit liegenden Zeitpunkt errechnen.

Bei Millisekunden rechnest Du dann halt mit 1 / 86400000 * Millisekunden.

Zur Vereinfachung machst Du Dir irgendwo einen Konstante dtOneMilliSec : TDateTime = 1 / 86400000; und rechnest dann mit der, das macht den Quelltext auch sofort lesbarer.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#3

AW: Zeit dazu addieren

  Alt 14. Dez 2021, 13:57
Gibt es einen einfachen Weg um zu einem TDateTime eine gewisse Anzahl an Sekunden zu addieren, welches auch dann Datumsübergreifend funktioniert?
Die Unit System.DateUtils bietet eine Reihe von Funktionen dafür, z.B. diese:
Delphi-Quellcode:
function IncSecond(const AValue: TDateTime;
  const ANumberOfSeconds: Int64 = 1): TDateTime; inline;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
FunThomas

Registriert seit: 15. Jul 2008
10 Beiträge
 
#4

AW: Zeit dazu addieren

  Alt 14. Dez 2021, 14:30
Vielen Dank das IncSecond war die einfache Lösung
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
294 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Zeit dazu addieren

  Alt 14. Dez 2021, 14:51
Und IncSecond lässt auch negative Werte zu; das entspricht dann einer Zeit-Subtraktion.
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
FunThomas

Registriert seit: 15. Jul 2008
10 Beiträge
 
#6

AW: Zeit dazu addieren

  Alt 3. Jan 2022, 12:24
Hi Leute,
mit der Zeit habe ich jetzt das nächste Problem

gibt es eine Möglichkeit die Zeit auf die nächsten vollen 5 Minuten aufzurunden?
also nehmen wir an ich habe hier TDateTime mit Wert 27.09.2021 12:25:01 und den möchte ich auf den nächsten vollen 5 min Takt aufrunden
also auf 27.09.2021 12:30:00

gibt es da eine bessere Methode ausser mir jeweils die MinuteOfTheHour/SecondOfTheMinute zu holen und dann zu den Sekunden dazu addieren bis wieder 0 erreicht und bei den Minuten addieren bis mod 5 als Rest 0 ergibt?

Danke im Voraus,
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#7

AW: Zeit dazu addieren

  Alt 3. Jan 2022, 13:56
Delphi-Quellcode:
var
  dt: TDateTime;
  interval: Int64;
  remain: UInt64;
begin
  dt := EncodeDateTime(2021, 9, 27, 12, 25, 1, 0);
  interval := (5*SecsPerMin*MSecsPerSec);
  remain := DateTimeToMilliseconds(dt) mod interval;
  dt := IncMilliSecond(dt, interval - remain);
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
FunThomas

Registriert seit: 15. Jul 2008
10 Beiträge
 
#8

AW: Zeit dazu addieren

  Alt 3. Jan 2022, 18:01
Vielen Dank funktioniert super!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.016 Beiträge
 
Delphi 12 Athens
 
#9

AW: Zeit dazu addieren

  Alt 3. Jan 2022, 18:45
Es gibt mehrere Hilfsfunktionen

MinuteOf oder MinuteOfTheHour
RecodeMinute
ReplaceTime
...

Delphi-Quellcode:
// abrunden
RecodeMinute(D, MinuteOf(D) div 5 * 5);

// -aufrunden- [edit] auf nächste 5 Minuten
IncMinute(D, 5 - MinuteOf(D) mod 5);

// [add] aufrunden
IncMinute(D, (5 - MinuteOf(D) mod 5) mod 5);
Aber hier werden die Sekunden/Millisekunden nicht behandelt,
was beim Beispiel von Uwe durch IncMilliSecond abgefangen wird.

Ich dachte mal es gab auch eine MinuteOf-Variante, welche als Double implementiert war die Bruchteile der Sekunden/Millisekunden mit enthält.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
FunThomas

Registriert seit: 15. Jul 2008
10 Beiträge
 
#10

AW: Zeit dazu addieren

  Alt 3. Jan 2022, 22:58
Vielen Dank!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:33 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