Delphi-PRAXiS

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)

klaus9 7. Okt 2013 21:25

Uhrzeit Stunden und Minuten abrunden
 
Hallo

ich habe gerade ein kleines Problem:

Zwei Text Felder

Im Edit1.text = wird die aktuelle Stunde angezeigt
Im Edit2.text = wird die Minutenzahl angezeigt

Jetzt zeigt er mir z.B.

14:53 an jetzt würde ich gerne in den weiteren text Feldern Edit3.text und Edit4.text immer die abgerundete Zeit
anzeigen lassen

sprich bei Edit1.text = 14 und im Edit2.text = 53 jetzt im Edit3.text = 14 (bleibt ja) und in Edit4.text = 45


Soll mir halt immer die 15 Minuten varianten anzeigen 15,30,45 und 00

wie bekomme ich es hin..

Meflin 7. Okt 2013 21:40

AW: Uhrzeit Stunden und Minuten abrunden
 
Code:
Round(53 / 15) * 15
und schon hast du die gewünschten Minuten ;)

Volker Z. 7. Okt 2013 21:49

AW: Uhrzeit Stunden und Minuten abrunden
 
Hallo,

nimm ein konstantes Array
Delphi-Quellcode:
ARRAY_MIN_QUATER : array [0..3] of string = ('00', '15', '30', '45');
, dann kannst Du mit
Delphi-Quellcode:
Edit4.text := ARRAY_MIN_QUATER [Minuten div 15]
zuweisen.

Gruß

klaus9 7. Okt 2013 21:54

AW: Uhrzeit Stunden und Minuten abrunden
 
hmm funktioniert irgendwie nicht..

Meflin 7. Okt 2013 21:55

AW: Uhrzeit Stunden und Minuten abrunden
 
Zitat:

Zitat von klaus9 (Beitrag 1231102)
hmm funktioniert irgendwie nicht..

Und was sollen wir mit dieser Info jetzt anfangen :roll: ?

Volker Z. 7. Okt 2013 22:16

AW: Uhrzeit Stunden und Minuten abrunden
 
Hallo,

Zitat:

hmm funktioniert irgendwie nicht..
Es funktionieren beide Varianten. Vielleicht war ich nicht ausführlich genug.

Delphi-Quellcode:
type
  TMinute = 0..59;
 
  TForm1 = class(TForm)
    Edit4: TEdit;
  private
    procedure SetMinQuaters (const Value : TMinute);
  public
    { Public-Deklarationen }
  end;

const
  ARRAY_MIN_QUATER : array [0..3] of string = ('00', '15', '30', '45');

procedure TForm1.SetMinQuaters (const Value : TMinute);
begin
  Edit4.Text := ARRAY_MIN_QUATER [Value div 15]
end;
Ein
Delphi-Quellcode:
SetMinQuaters (53)
liefert das gewünschte Ergebnis.

Gruß

himitsu 7. Okt 2013 23:09

AW: Uhrzeit Stunden und Minuten abrunden
 
einfache Mathematik:

Delphi-Quellcode:
var D: TDateTime; F: Integer;

F := MinsPerDay div 15; // Rundungsfaktor für 15 Minuten (oder / und Single, wenn keine ganze Zahl rauskommen würde)
D := Trunc(D * F) / F;
bzw.

Delphi-Quellcode:
var D: TDateTime;

D := Trunc(D * MinsPerDay / 15) * 15 / MinsPerDay;

klaus9 8. Okt 2013 21:38

AW: Uhrzeit Stunden und Minuten abrunden
 
Hallo,

ich habe es derzeit folgendermaßen gelößt.

Jetzt wird mir die Zeit in die Edit Felder eingefügt

Edit1 = Stunden und Edit2 = Minuten (abgezogen -15)
Edit3 = Stunden und Edit4 = Minuten (ohne abzug)

Ist natürlich nicht so wie es sein sollte..

Was müßte ich jetzt in diesem Code verändern, damit mir wenn z.B. 22:14 ist er richtig gesehen abrunden würde.

Also am besten würde es sein wie folgt.

Wir hätten jetzt realzeit 22:21Uhr und er geht 15Min zurück und nimmt nur 5 Minuten schritte, sprich Erebnis

22:21Uhr, -15 Minuten = 22:06 = Dieses abrunden auf 5ér Schritte = Endergebnis 22:05 diese in Edit1 und Edit 2 anzeigen und desweiteren Edit 3 und Edit 4 soll nun stehen 22:20Uhr statt der 22:21Uhr










Delphi-Quellcode:
unit zeittool;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit5: TEdit;
    Label5: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  a,b,s : integer;                                { Variablen-Vereinbarung }



begin
Edit1.Text := FormatDateTime('hh', now);
Edit4.Text := FormatDateTime('nn', now);
Edit3.Text := FormatDateTime('hh', now);
//Combobox10.Text := FormatDateTime('nn', now);
  a := StrToInt(Edit4.Text); b := StrToInt(Edit5.Text); { Eingabe               }

  s := a - b;                                     { Verarbeitung          }

  Edit2.Text := IntToStr(s);                         { Ausgabe               }

end;


procedure TForm1.FormCreate(Sender: TObject);
begin

end;

end.

Volker Z. 8. Okt 2013 22:29

AW: Uhrzeit Stunden und Minuten abrunden
 
Hallo,

bin mir zwar jetzt nicht sicher, ob ich Dein Anliegen richtig verstanden habe (und, ob die Zuordnung der Edits stimmt), Du kannst Dir mal folgendes versuchen:
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:%.2d', [Hour, Minute])
  end;

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

  Edit1.Text := FormatTime (h, m);
  Edit3.Text := FormatTime (h, MinutesRounded (m));
  Edit4.Text := FormatTime (h, MinutesRounded (m - 15));
end;
Gruß

bcvs 9. Okt 2013 06:39

AW: Uhrzeit Stunden und Minuten abrunden
 
Zitat:

Zitat von klaus9 (Beitrag 1231097)
Soll mir halt immer die 15 Minuten varianten anzeigen 15,30,45 und 00

Zitat:

Zitat von klaus9
Wir hätten jetzt realzeit 22:21Uhr und er geht 15Min zurück und nimmt nur 5 Minuten schritte

Was denn jetzt? 15 min oder 5 min?

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ß

Medium 10. Okt 2013 00:24

AW: Uhrzeit Stunden und Minuten abrunden
 
Die Informationslage ist hier in der Tat bullshit. Man bekommt durchaus den Eindruck, als wolle uns klaus9 bewusst veräppeln. Oder er weiss selber nicht, was es nachher mal werden soll. Ich plädiere aber für ersteres, da er sein bereits berechtigt gerügtes "funktioniert nicht" auch noch wiederholt hat. Was bzw. wie viel denken solche Leute?


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