AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeit dazu addieren

Ein Thema von FunThomas · begonnen am 14. Dez 2021 · letzter Beitrag vom 4. Jan 2022
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Zeit dazu addieren

  Alt 14. Dez 2021, 12: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
 
#2

AW: Zeit dazu addieren

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

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

AW: Zeit dazu addieren

  Alt 14. Dez 2021, 13: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
 
#4

AW: Zeit dazu addieren

  Alt 3. Jan 2022, 11: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

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

AW: Zeit dazu addieren

  Alt 3. Jan 2022, 12: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
 
#6

AW: Zeit dazu addieren

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

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

AW: Zeit dazu addieren

  Alt 3. Jan 2022, 17: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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
FunThomas

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

AW: Zeit dazu addieren

  Alt 3. Jan 2022, 21:58
Vielen Dank!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Zeit dazu addieren

  Alt 4. Jan 2022, 16:47
Vielen Dank funktioniert super!
Vermutlich doch nicht so ganz. Das IncMilliSecond darf natürlich nur aufgerufen werden, wenn remain > 0 ist. Andernfalls würden auch 5 Minuten dazu addiert, wenn gerade ein 5-Minuten-Interval erreicht ist.
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;
  if remain > 0 then
    dt := IncMilliSecond(dt, interval - remain);
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz