Autor Beitrag
Handycommander
ontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1054

Windows XP Pro, Vista
Visual Studio 2008
BeitragVerfasst: Mi 12.01.05 20:01 
Hallo,

ich möchte gerne folgendes machen:

Minuten in Stunden; wenn 24 stunden dann
Stunden in Tage; wenn 7 Tage dann
Tage in Wochen; wenn 4 Wochen dann
Wochen in Monat; wenn 12 Monate dann
Monate in Jahre

Hab das mit Convert probiert, hat aber nicht geklappt :(

Habt ihr noch andere Beispiel?

Danke

Tobias
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Mi 12.01.05 20:12 
Hallo Handycommander,

in welchem Format speicherst du den das Datum?
Wenn du TDateTime benutzt, dann geht das durch einfaches rechnen
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
const
  OneHour = 1 / 24;
  OneDay = 1;
  OneWeek = 7;
  {etc}
var
  Date: TDateTime;
  Hour, Day: Week: Word;
begin
  Hour := 0;
  Day := 0;
  Week := 0;
  while Date >= OneWeek do begin
    Date := Date - OneWeek;
    Inc(Week);
  end;
  {jetzt noch auf den rest prüfen, mit dem größten wert aber beginnen...}
Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
Handycommander Threadstarter
ontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1054

Windows XP Pro, Vista
Visual Studio 2008
BeitragVerfasst: Mi 12.01.05 20:16 
Hallo,

das ist kein Datum. Das wird einfach so in Dezimalstellen dargestellt. Und wenn die Zahl größer als 60 ist dann soll da stehen, dass es 1 Stunde ist. Genauso auch bei den Tagen, Wochen, etc.

Also:
Die Zahl lautet: 61,23
Dann soll da dort stehen: 1,23 Stunde(n)

Oder, wenn das geht: 1 Stunde 23 Minuten oder so

MfG

Tobias
Handycommander Threadstarter
ontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1054

Windows XP Pro, Vista
Visual Studio 2008
BeitragVerfasst: Mi 12.01.05 21:45 
Ich hab das jetzt mal so gelöst:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
    if StrToFloat(Label8.Caption) >= 60 then
    begin
      Stunde := StrToFloat(Label8.Caption) / 60;
      Label3.Caption := FLoatToStr(RundeAufStelle(Stunde, 2)) + ' Stunde(n)';
      Label8.Caption := FloatToStr(RundeAufStelle(Stunde, 2));
      if StrToFloat(Label8.Caption) >= 24 then
      begin
        Tage := StrToFloat(Label8.Caption) / 24;
        Label3.Caption := FloatToStr(RundeAufStelle(Tage, 2)) + ' Tag(e)';
        Label8.Caption := FloatToStr(RundeAufStelle(Tage, 2));
      end;
      if StrToFloat(Label8.Caption) >= 7 then
      begin
        Woche := StrToFloat(Label8.Caption) / 7;
        Label3.Caption := FloatToStr(RundeAufStelle(Woche, 2)) + ' Woche(n)';
        Label8.Caption := FloatToStr(RundeAufStelle(Woche, 2));
      end;
    end
    else
    begin
      Label3.Caption := FloatToStr(RundeAufStelle(Endergebnis, 2)) + ' Minute(n)';
    end;


Was sagt ihr dazu?
Der Code hat noch irgendwo einen fehler, aber ich weiß nicht wo :oops:

MfG

Tobias
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Mi 12.01.05 21:50 
Das Beispiel von mir funktioniert doch da genauso. Nur musst du halt folgende Konstanten ändern:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
const
  OneHour = 60;
  OneDay = OneHour * 24;
  OneWeek = OneDay * 7;
  {usw.}
Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
Handycommander Threadstarter
ontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1054

Windows XP Pro, Vista
Visual Studio 2008
BeitragVerfasst: Mi 12.01.05 22:01 
Ich kapier dein Beispiel nicht :oops:

Warum ziehst du vom Datum die Woche ab?
Das brauche ich doch gar nicht, wenn ich meine Zahlen einfach in Stunden etc. umwandlen will.

Oder?

MfG
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mi 12.01.05 23:18 
Handycommander hat folgendes geschrieben:

Der Code hat noch irgendwo einen fehler, aber ich weiß nicht wo :oops:

Wenn wir noch wüssten, was für ein Fehler auftritt... was passiert denn, was nicht passieren soll? Compiler warnungen/Hinweise/Fehler??? Mal die Glaskugel anschmeissen...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
        Label8.Caption := FloatToStr(RundeAufStelle(Woche, 2)); //Ich Tippe auf einen fehler in der Funktion...
      end;   
    end   
    else    
      Label3.Caption := FloatToStr(RundeAufStelle(Endergebnis, 2)) + ' Minute(n)';   //begin und end; weglassen, wenns ih nur eine Zeile ist... aber nicht zwingend nötig.

Warum postest du uns nicht mal deine RundeAufStelle function, damit wir auch die auf fehler untersuchen können?

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Handycommander Threadstarter
ontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1054

Windows XP Pro, Vista
Visual Studio 2008
BeitragVerfasst: Do 13.01.05 11:28 
Hallo,

es handelt sich um keinen Fehler in der RundeAufStelle Funktion. Es handelt sich um einen Fehler bei der Umrechnung.
Denn, wenn ich umrechne, dann kommt manchmal Woche statt Stunde, etc.

Es klappt also der Code von mir ansich, aber irgendwie wandelt der das nicht genau um.

MfG

Tobias
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 13.01.05 18:36 
dann postest du vielleicht die rundeaufstelle funktion, damit wirs ausprobieren können? ich würd dir ja helfen, aber ich find keinen fehler in deinem code. ich würds halt ma ausprobiern wollen...

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Do 13.01.05 18:56 
Einfache Mathematik:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Stunde = 0
Minute = 0
Sekunde = 0

Zahl: 122,5  //1 Stunde 2 Minuten und 5 Sekunden
122,5 - 60 = 62,5   //Stunde Abziehen
Stunde + 1  //Stunde nun gleich eins
62,5 - 60 = 2,5 //Stunde Abziehen
Stunde + 1  //Stunde nun gleich zwei

//Da 2,5 - 60 < 0 mit nächst kleineren Einheit anfangen, also Minute
2,5 - 1 = 1,5 //Minute abziehen
Minute + 1 //1 Minute
1,5 - 1 = 0,5 //...
Minute + 1 //2 Minute...usw...

//Das Beispiel oben von mir macht das nun für Wochen. Da musst du jetzt noch Tage, Stunden, Minuten und Sekunden einfügen, dann hast du es komplett
Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
Handycommander Threadstarter
ontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1054

Windows XP Pro, Vista
Visual Studio 2008
BeitragVerfasst: Do 13.01.05 22:34 
Hallo Wulfskin,

ich verstehe dein Beispiel nicht ganz :oops:
Wie soll der Code denn funktioneren, was soll er denn bewirken? Warum rechnest du immer 1 dazu?

Kannst du mal das ganze Beispiel in Delphi-Code Bitte posten?
Ich kann mir darunter jetzt noch nicht soviel vorstellen.

MfG

Tobias
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Do 13.01.05 23:31 
Hallo,

irgendwie reden wir aneinander vorbei. Ich gehe davon aus, dass du eine Zeit in Dezimalschreibweise hast und diese die Minuten Zahl angibt (z.B. 122,5 Minuten ist das selbe wie 2 Stunde, 2 Minuten und 30 Sekunden). So, nun möchtest du diese Zahl ja Zerlegen in Wochen, Tage und so weiter. In meinem ersten Codebeispiel (ganz oben), habe ich dir gezeigt, wie du in einer Schleife diese so "umrechnen" kannst, dass du später in den einzelnen Variablen wie z.B. Week die Anzahl der Wochen hast. Dazu bin ich wie folgt vorgegangen:
  • Ich setze alle Variablen auf null, da es ja sein kann, wie in diesem Beispiel, dass gar keine (=null) Wochen vorhanden sind.
  • Nun fange ich mit der größten Einheit, der Woche an und ziehe in einer Schleife immer diese Einheit von der ursprünglichen Zeit ab und erhöhe gleichzeitig den Wert der Variablen Woche.
  • Das mache ich solange, bis die Zeitvariable kleiner ist als eine Woche, also gar keine Woche mehr enthält.
  • Mit der Restzeit beginne ich von neuem nur das ich jetzt die nächst kleinere Einheit wähle, also z.B ein Tag.
  • Wenn du schliesslich alle Einheiten durchgehst, dann hast du später in deinen Variablen die Zeit zerlegt in Wochen, Tage und so weiter
Ich hoffe du hast mich jetzt verstanden. Wenn nicht, dann :twisted: :wink:.

Achja, wenn ich es mir recht überlege, brauchst du gar keine Schleifen mehr. Es reicht alleine div und mod, wenn du die Zahl auf eine Ganzzahl bekommst...

Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
Handycommander Threadstarter
ontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1054

Windows XP Pro, Vista
Visual Studio 2008
BeitragVerfasst: Fr 14.01.05 14:02 
Hallo,

das ist mir jetzt schon klar, ABER:

Ich will nicht die ganze Dezimalzahl in Wochen etc. umrechnen!

SONDERN:
Ich möchte, wenn die Dezimalzahl prüfen, ob die Zahl kleiner als ein Jahr ist, kleiner als ein Monat ist, kleiner als eine Woche, kleiner als ein Tag, kleiner als eine Stunde, kleiner als eine Minute und kleiner als eine Sekunde ist.
Und dann soll es die kleinstmögliche Umwandlung anzeigen:

Bei deinem Beispiel dann also:
122,5 soll dann sein: 2 Stunden 2 Minuten und 30 Sekunden

Und nicht:
0 Wochen 0 Tage 2 Stunden 2 Minute 30 Sekunden

MfG

Tobias