Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Uhrzeit Stunden und Minuten abrunden (https://www.delphipraxis.net/176966-uhrzeit-stunden-und-minuten-abrunden.html)

Meflin 9. Okt 2013 09:50

AW: Uhrzeit Stunden und Minuten abrunden
 
Zitat:

Code:
  function MinutesRounded (const Value : Integer) : Word;
  begin
    if Value < 5 then
      Result := 0
    else
      Result := 5 * (Value div 5)
  end;

Sollte 4..0 div 5 nicht immer 0 ergeben und das komplette if-else damit überflüssig sein :stupid: ?

himitsu 9. Okt 2013 10:21

AW: Uhrzeit Stunden und Minuten abrunden
 
Zitat:

Zitat von Meflin (Beitrag 1231313)
Sollte 4..0 div x nicht immer 0 ergeben

Vielleicht eine falsche Matheregel?

Delphi-Quellcode:
0 durch irgendwas
ist erlaubt, aber bei
Delphi-Quellcode:
irgendwas durch 0
knallt es natürlich.

klaus9 9. Okt 2013 10:24

AW: Uhrzeit Stunden und Minuten abrunden
 
Hallo

vielen Dank habe es jetzt fast fertig mit dem Code vom volker

Jetzt liegt nur ein Problem vor wenn wir 11.05uhr haben Minus 15minuteb zeigt er mir
Bei Std 11an statt 10 und bei min 00 statt 50

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
* h, m, s, z : Word;
*
* function MinutesRounded (const Value : Integer) : Word;
* begin
*** if Value < 5 then
***** Result := 0
*** else
***** Result := 5 * (Value div 5)
* end;
*
* function FormatTime (const Hour, Minute : Word) : string;
* begin
*** Result := Format ('%.2d', [Minute])
* end;
* function FormatTimeh (const Hour, Minute : Word) : string;
* begin
*** Result := Format ('%.2d', [Hour])
* end;
*
begin
* DecodeTime (Now, h, m, s, z);
* Edit2.Text := FormatTimeh (h, m);
* Edit1.Text := FormatTimeh (h, m);
* Edit4.Text := FormatTime (h, MinutesRounded (m));
* Edit3.Text := FormatTime (h, MinutesRounded (m - 15));
end;

himitsu 9. Okt 2013 10:48

AW: Uhrzeit Stunden und Minuten abrunden
 
Tja, wenn du Minuten und Stunden getrennt verwaltest, dann mußt du bei der Subtraktion der 15 Minuten natürlich auch die Stunden anpassen, wenn es einen "überlauf" gibt.

Eine Stunde abziehen, wenn es weniger als 15 Minuten sind.
Delphi-Quellcode:
Edit3.Text := FormatTime (h - IfThen(m < 15, -1, 0), MinutesRounded (m - 15));
Aber, jetzt natürlich nicht vergessen, daß aus 0:05 Uhr jetzt -1 uhr würde. :stupid:
Also mußt du hier natürlich auch wieder auf die 24 Stunden achten.

klaus9 9. Okt 2013 13:49

AW: Uhrzeit Stunden und Minuten abrunden
 
Irgendwie klappt es nicht :-(

Volker Z. 9. Okt 2013 16:31

AW: Uhrzeit Stunden und Minuten abrunden
 
Hallo,

Zitat:

Zitat von Meflin (Beitrag 1231313)
Zitat:

Code:
  function MinutesRounded (const Value : Integer) : Word;
  begin
    if Value < 5 then
      Result := 0
    else
      Result := 5 * (Value div 5)
  end;

Sollte 4..0 div 5 nicht immer 0 ergeben und das komplette if-else damit überflüssig sein :stupid: ?

Ist schon richtig für 0..4. Nur nicht mehr -15..-6. Mit MinutesRounded (m - 15) durchaus möglich. Aus den (etwas wirren) Vorgaben des TE war nicht klar abzuleiten was er den eigentlich erreichen möchte. Deshalb habe ich die negativen Fälle mit dem Rückgabewert 0 behandelt.

Zitat:

Irgendwie klappt es nicht
Und was klappt nicht? Kannst Du mal Infos liefern?

Hast Du es so schon mal versucht
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  h, m, s, z : Word;

  function MinutesRounded (const Value : Integer) : Word;
  begin
   Result := 5 * (Value div 5)
  end;

  function FormatTime (const Hour, Minute : Word) : string;
  begin
   Result := Format ('%.2d:%.2d', [Hour, Minute])
  end;

begin
  DecodeTime (Now, h, m, s, z);

  Edit1.Text := FormatTime (h, m);
  Edit3.Text := FormatTime (h, MinutesRounded (m));
  if m - 15 > -1 then
    Dec (m, 15)
  else
   begin
     m := 50;
     if h - 1 > -1 then
       Dec (h)
     else
       h := 23
   end;
  Edit4.Text := FormatTime (h, MinutesRounded (m));
end;
Gruß

klaus9 9. Okt 2013 21:30

AW: Uhrzeit Stunden und Minuten abrunden
 
Hi Volker,

deine Variante funktioniert super..

er Zeigt mir jetzt wie gewünscht an:

Edit1.text = 22:26
Edit3.text = 22:25

Edit4.text = leer
Edit2.text = 22:10


jetzt muss ich nur noch aus diesen Werten die Felder splitten um diese wie gewünscht anzeigen zu lassen.

Edit1.text = 22 (nur Stunden angezeigt ohne minuten abgerundete version)
Edit3.text = 22 (nur Stunden jetzt STD ohne minuten)

Edit4.text = 25 (nur Minuten angezeigt ohne Stunden agerundete version)
Edit2.text = 10 (nur Minuten angezeigt ohne Stunden -15Min abgerundete version)


Würde halt gerne in den Edit Feldern nur die Stunden und nur die Minuten anzeigen lassen..

Volker Z. 9. Okt 2013 22:25

AW: Uhrzeit Stunden und Minuten abrunden
 
Hallo,

Zitat:

Würde halt gerne in den Edit Feldern nur die Stunden und nur die Minuten anzeigen lassen..
Und wo liegt dann Dein Problem? Wenn die Funktion FormatTime zwei Parameter (Stunde und Minute) nimmt und als Ergebnis sowas wie 22:26 zurückgibt, dann sollte es doch eigentlich nicht so schwer sein die Funktion so umzuschreiben, dass nur ein Parameter (entweder Stunde oder Minute) übergeben wird und der Rückgabewert der entsprechend formatierten Zeichenfolge entspricht.
Also:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

  function FormatTime (const Value : Word) : string;
  begin
    Result := Format ('%.2d', [Value])
  end;

begin
  Edit1.Text := FormatTime (h);
  Edit2.Text := FormatTime (m)
end;
Schau Dir bei Gelegenheit in der OH die Erläuterungen zu Format und all den anderen im Thread aufgeworfenen Themen an.

Gruß

himitsu 9. Okt 2013 22:51

AW: Uhrzeit Stunden und Minuten abrunden
 
Zitat:

Zitat von Volker Z. (Beitrag 1231454)
Ist schon richtig für 0..4. Nur nicht mehr -15..-6. Mit MinutesRounded (m - 15) durchaus möglich.

Wobei es dann aber falsch rechnet, denn aus 01 müßte ja 45 werden und nicht 00 :zwinker:

Volker Z. 9. Okt 2013 23:54

AW: Uhrzeit Stunden und Minuten abrunden
 
Hallo,

Zitat:

Zitat von himitsu (Beitrag 1231498)
Zitat:

Zitat von Volker Z. (Beitrag 1231454)
Ist schon richtig für 0..4. Nur nicht mehr -15..-6. Mit MinutesRounded (m - 15) durchaus möglich.

Wobei es dann aber falsch rechnet, denn aus 01 müßte ja 45 werden und nicht 00 :zwinker:

nope (mit verlaub :wink:), da rechnet nix falsch. Bei klaren Vorgaben, entsprechende Programmierergebnisse. Fehlen diese :gruebel: kann nur geraten werden was der TE den eigentlich will; ich habe geraten und lag da wohl an der einen oder anderen Stelle ein klein wenig daneben (ansonsten konnte ich offenbar weiterhelfen).

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 Uhr.
Seite 2 von 3     12 3      

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