AGB  ·  Datenschutz  ·  Impressum  







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

mit Zeiten Rechnen

Ein Thema von RX3 · begonnen am 13. Apr 2006 · letzter Beitrag vom 14. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
RX3

Registriert seit: 2. Jun 2004
42 Beiträge
 
#1

mit Zeiten Rechnen

  Alt 13. Apr 2006, 23:50
Hallo ich möchte mit Zeiten rechnen und bräuchte bisl Hilfe,

Ich habe eine Zahl (Minutenanzahl), die in eine Zeitangabe umgerechnet werden soll
bsp. 135,5 min = 2:15:30 (2h15min30s)
diese Minutenanzahl wird durch 2 Editfelder berechnet. (Time2)

Nach dieser Berechnung wird in ein drittes Editfeld eine weitere Zeitangabe (Format hh:mm:ss) eingegeben. (Time1)
Von dieser Zeitangabe sollen die vorherigen Minuten abgezogen werden (Time3 = Time1-Time2)

Kann mir da irgendjemand weiterhelfen?
Irgendwie krieg ich das mit den Encode/DecodeTime-Funktionen nich ganz hin.

Folgenden Code habe ich bisher

Delphi-Quellcode:
  a := StrToInt64(Edit1.Text); //a = Ressis vorhanden
  b := StrToInt64(Edit2.Text); //b = Ressiproduktion pro h
  h := Trunc(a/b); //h = Stundenanzahl seit Verlassen der Flotte
  m := Round(h/60); //m = Minutenanzahl seit Verlassen der Flotte
  s := Round(m/60);
  ss:= Round(S/100);

  TimeSeparator := ':';
  ShortTimeFormat := 'hh:mm:ss';
  Time1 := StrToTime(Edit3.Text); //Time1 = Spionagezeitpunkt
  TryEncodeTime(h,m,s,ss,Time2); //Time2 = berechnete Flugzeit aus Ressiproduktion
  Time3 := Time1-Time2;

  DecodeTime(Time3,h3,m3,s3,ss3);
  Label1.Caption := IntToStr(h3) + ':' + IntToStr(m3) + ':' + IntToStr(s3);
(bitte keine professionellen Code-Vorschläge, sondern einfachen simplen Code, damit ich es auch selber verstehe *gg*)
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#2

Re: mit Zeiten Rechnen

  Alt 14. Apr 2006, 00:31
Erstmal ist die Anzahl der Minuten nicht die Anzahl der Stunden durch 60 sondern die Anzahl der Stunden mal 60 (genauso bei sekunden etc.)

Dann sieht es bei dir so aus dass du sagst: 2 Stunden, 120 Minuten und 7200 Sekunden, wobei du ja eher meinst: 2 Stunden, 0 Minuten und 0 Sekunden


Also berechne erstmal die Anzahl der hundertstel Sekunden aus der Stundenzahl:

Delphi-Quellcode:
var
  ss,s,m,h,rest:integer;
begin
  rest:=round(ZEITWERT IN STUNDEN * 360000); //den zeitwert in Stunden solltest du mit strtofloat bestimmen (Kommazahlen möglich)
  ss:=rest mod 100 //Die Anzahl der Hundertstelsekunden entspricht dem Teilungsrest des Zeitwerts (rest) durch hundert.
  rest:=rest div 100 //Jetzt durch hundert teilen, da die Hundertstelsekunden erledigt sind.
  //das selbe mit sec/min/h machen:
  
  s:=rest mod 60;
  rest:=rest div 60;

  min:=rest mod 60;
  rest:=rest div 60;
 
  h:=rest; //der übrige Wert in REST ist die Stundenanzahl
end;
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#3

Re: mit Zeiten Rechnen

  Alt 14. Apr 2006, 00:53
Hallo,

Du kannst die Sache noch weiter vereinfachen, wenn Du die Routine IncMilliSecond aus der Unit DateUtils verwendest.
Damit kann man eine Anzahl Millisekunden zu einem TDateTime-Wert addieren:

Delphi-Quellcode:
a := StrToInt64(Edit1.Text); // a = Ressis vorhanden
b := StrToInt64(Edit2.Text); // b = Ressiproduktion pro h
Time1 := StrToTime(Edit3.Text); // Time1 = Spionagezeitpunkt

// Stundenanzahl seit Verlassen der Flotte berechnen
h := Trunc(a / b);
// Flugzeit vom Spionagezeitpunkt subtrahieren
Zeit := IncMilliSecond(Time1, -h * 360000);
Zur Ausgabe des Ergebnisses könntest Du die Funktion FormatDateTime aus der Unit SysUtils verwenden:

Label1.Caption := FormatDateTime('hh:nn:ss', Zeit); Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#4

Re: mit Zeiten Rechnen

  Alt 14. Apr 2006, 01:00
Und noch einfacher

Label1.Caption := FormatDateTime('hh:nn:ss', 135.5 / 60 / 24); Denn 135.5 Minuten / 60 Minuten / 24 Stunden sind die Bruchteile eines Tages, und ein TDateTime ist nichts anderes als

TDateTime = Anzahl Tage komma Bruchteile eines Tages

Ein Wert von 0.5 in einem TDateTime ist also exakt 12 Uhr, 0.75 = 3/4tel eines Tages also 18 Uhr.

Du musst also keinerlei Umwege über Stringformatierungen, Datum/Zeit-de-/enkodierungen gehen.

Du kannst also ganz einfach mit Zeiten rechnen:

12 Uhr + 15 Minuten ist

TDateTime( (12 / 24) + (15 / 60 / 24) )

Gruß Hagen
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: mit Zeiten Rechnen

  Alt 14. Apr 2006, 01:06
@Hagen: Alles lesen
Er möchte keinen konstanten Wert darstellen, sondern einen berechneten...

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: mit Zeiten Rechnen

  Alt 14. Apr 2006, 01:19
Außerdem, müsste es nicht heißen: 'hh:mm:ss'?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#7

Re: mit Zeiten Rechnen

  Alt 14. Apr 2006, 02:00
Zitat:
@Hagen: Alles lesen
Er möchte keinen konstanten Wert darstellen, sondern einen berechneten...
Und wo ist das problem ?
Diese Frage taucht alle par Tage in der DP auf und immer wieder sehe ich Vorschlage die viel zu kompliziert darauf antworten. Aber am schlimmsten empfinde ich eben den Punkt das die vielen Antworten deutlich zeigen das man nicht verstanden hat was ein TDateTime ist, wie darin das Datum/Uhrzeit oder eben einfach Zeiten kodiert sind und wie man damit rechnet.

Die viele Datum/Zeit Funktion in der RTL sind ja schön und gut aber fast 90% dieser Funktionen sind überflüssig und verkomplizieren das Verständnis.

Worauf ich also mit obigen Posting hinaus wollte ist nicht die fertige Lösung sondern das Verständnis zur fertigen Lösung.

Label1.Caption := FormatDateTime('hh:nn:ss', StrToFloat(Edit1.Text) / 60 / 24); So besser !? oder so ?

Label1.Caption := FormatDateTime('hh:nn:ss', MinutenWert / 60 / 24);
Zitat:
Außerdem, müsste es nicht heißen: 'hh:mm:ss'?
Nein müsste es nicht. mm gibt den Monat an und da mm schon damit vergeben ist ist laut Delphi Hilfe nn die Stunde.

Und nur kurz was man in Delphi 6 unit Dateutils.pas findet:

Delphi-Quellcode:
function MilliSecondOfTheYear(const AValue: TDateTime): Int64;
begin
  Result := MilliSecondOf(AValue) + SecondOfTheYear(AValue) + 1000;
end;

function MilliSecondOfTheMonth(const AValue: TDateTime): LongWord;
begin
  Result := MilliSecondOf(AValue) + SecondOfTheMonth(AValue) + 1000;
end;

function MilliSecondOfTheWeek(const AValue: TDateTime): LongWord;
begin
  Result := MilliSecondOf(AValue) + SecondOfTheWeek(AValue) + 1000;
end;
Viele schöne Datum/Zeit Funktionen, viel zu viele und dann noch offensichtlich falsch.
Funktionen wie Estern() fehlen aber.

Gruß Hagen
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.077 Beiträge
 
Delphi XE2 Professional
 
#8

Re: mit Zeiten Rechnen

  Alt 14. Apr 2006, 02:20
Zitat von negaH:
Nein müsste es nicht. mm gibt den Monat an und da mm schon damit vergeben ist ist laut Delphi Hilfe nn die Stunde.
@Hagen : nn ist die Minute, nicht Stunde
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#9

Re: mit Zeiten Rechnen

  Alt 14. Apr 2006, 02:22
Stimmt

Gruß Hagen
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: mit Zeiten Rechnen

  Alt 14. Apr 2006, 09:00
Guten Morgen.

Um beim Rechnen mit Zeitwerten nicht unnötig durch die zwangsläufigen Rundungsfehler der Fließkommaarithmetik überrascht zu werden, rechne ich stets mit Ganzzahlwerten (Sekunden), konvertiere diese aber für die Anzeige und die Benutzereingabe von und zu TDateTime (Fließkommawert) und schließlich String, wobei die von Hagen erwähnte Unit DateUtils gute Dienste leistet. Zum Thema Rundungsfehler beim Rechnen mit Zeiten ist vielleicht auch das Lesen in diesem thread interessant: klick.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:51 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