AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Industrieminuten

Ein Thema von StepByStep · begonnen am 22. Jan 2015 · letzter Beitrag vom 23. Jan 2015
Antwort Antwort
Seite 1 von 3  1 23   
StepByStep

Registriert seit: 12. Nov 2014
Ort: Schleswig-Holstein
61 Beiträge
 
Delphi 7 Professional
 
#1

Industrieminuten

  Alt 22. Jan 2015, 09:00
Delphi-Version: XE2
Guten Morgen zusammen,

bevor die Frage aufkommen sollte: Ja, ich habe die SuFu genutzt.

Mein Problem ist folgendes:
Ich möchte zwei TDateTimes vergleichen und mir die Differenz in Stunden ausgeben lassen.
Mir sind die Funktionen YearBetween, HoursBetween, etc. bekannt und leider auch zu ungenau.
Deshalb habe ich eine eigene Funktion geschrieben:

Delphi-Quellcode:
function TXmlfunction.GetDate(dtVon, dtBis: TDateTime): string;
var
  dtDate: TDateTime;
  sHour: string;
  sTime: string;
begin
  dtDate := (dtBis - dtVon);
  sHour := TimeToStr(dtDate);
  sTime := FloatToStr(StrToFloat(sHour[1] + sHour[2]) + StrToFloat(sHour[4] + sHour[5]) / 60);
  result := sTime;
end;
Das Problem was sich nun stellt ist, dass wenn ich beispielsweise folgende Rechnung habe:

22.01.2015 10:00:00 - 21.01.2015 10:00:00,

dann ist das Ergebnis 0, da er durch den Befehl TimeToStr() nur die Stunden nimmt.
Ich kann aber nicht DateTimeToStr() nutzen, weil ich so nur Müll rausbekomme.

Frage: Wie stelle ich das jetzt am geschicktesten an?

Gruß
Jan
Jan
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Industrieminuten

  Alt 22. Jan 2015, 09:05
Wozu dieses ganze String-Geraffel, wäre z.B. DecodeDateTime nicht zielführender?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Industrieminuten

  Alt 22. Jan 2015, 09:10
Oder Delphi-Referenz durchsuchenHourOf, Delphi-Referenz durchsuchenMinuteOf, Delphi-Referenz durchsuchenMinutesBetween usw.


Abgesehn von den fehleranfälligen Stringbehandlungen ... StrToFloat, obwohl man nur ganze Zahlen rein gibt.


Zitat:
Das Problem was sich nun stellt ist, dass wenn ich beispielsweise folgende Rechnung habe:
Du rechnest nur mit dem Stundenanteil, da muß es bei Tagesüberschreitungen natürlich knallen.
Wie wäre es, wenn du auch die Tages/Monats/Jahres-Anteile mit einrechnest?

Und was ist mit den MinutenSekunden-Anteilen?
22.01.2015 10:00:00 - 22.01.2015 09:30:00

Nur das Markierte wird von dir beachtet und der Rest einfach ignoriert, da kann das doch nicht richtig funktionieren.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Jan 2015 um 10:32 Uhr) Grund: Minuten vergessen (siehe #8)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Industrieminuten

  Alt 22. Jan 2015, 09:44
Nach kurzer Überlegung: die Differenz zweier TDateTime ist doch in Tagen, um also auf die Stunden zu kommen, müsste man sie doch lediglich mit 24 multiplizieren, oder mache ich da einen Denkfehler?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Industrieminuten

  Alt 22. Jan 2015, 09:52
Nach kurzer Überlegung: die Differenz zweier TDateTime ist doch in Tagen, um also auf die Stunden zu kommen, müsste man sie doch lediglich mit 24 multiplizieren, oder mache ich da einen Denkfehler?
Ja und Nein - kein Denkfehler

UPDATE Aber bitte keine MagicValues im Code benutzen sondern Delphi-Referenz durchsuchenSystem.SysUtils.HoursPerDay

UPDATE 2 Die einzige Zahl, die keine MagicValue ist, ist die 42
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (22. Jan 2015 um 09:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.753 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Industrieminuten

  Alt 22. Jan 2015, 09:53
Nach kurzer Überlegung: die Differenz zweier TDateTime ist doch in Tagen, um also auf die Stunden zu kommen, müsste man sie doch lediglich mit 24 multiplizieren, oder mache ich da einen Denkfehler?


Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
StepByStep

Registriert seit: 12. Nov 2014
Ort: Schleswig-Holstein
61 Beiträge
 
Delphi 7 Professional
 
#7

AW: Industrieminuten

  Alt 22. Jan 2015, 10:22
Danke schonmal für die Antworten. Mein Programm erfasst Arbeitszeiten.

Zitat:
Und was ist mit den Minuten-Anteilen?
22.01.2015 10:00:00 - 22.01.2015 09:30:00
Mit der Funktion die ich dort geschrieben habe, werden in der Tat auch die Minuten mitgerechnet @himitsu

Zitat:
UPDATE Aber bitte keine MagicValues im Code benutzen sondern
Was genau ist eine MagicValue? Noch nie gehört.

Zitat:
Nach kurzer Überlegung: die Differenz zweier TDateTime ist doch in Tagen, um also auf die Stunden zu kommen, müsste man sie doch lediglich mit 24 multiplizieren, oder mache ich da einen Denkfehler?
Denkfehler nicht nein, aber bei mir glaube ich schon. Würde dieser Denkansatz dann aus meinem Code folgendes machen:

Delphi-Quellcode:
function TXmlfunction.GetDate(dtVon, dtBis: TDateTime): string;
var
  dtDate: TDateTime;
begin
  dtDate := ((dtBis - dtVon)*24);
  result := DateTimeToStr(dtDate);
end;
Gruß
Jan
Jan
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Industrieminuten

  Alt 22. Jan 2015, 10:26
Mit der Funktion die ich dort geschrieben habe, werden in der Tat auch die Minuten mitgerechnet @himitsu
Ohhhh, da hat mir die gut benannte Variable "sHour" einen Streich gespielt.
(hab da schnell und heimlich da oben meine Antwort angepasst)

Zitat:
MagicValue
Eine einfach so im Code stehende Zahl, deren Bedeutung man nicht sofort erkennt.
Darum gibt es auch diese "sprechenden" Konstanten. (Oder man schreibt ständig "unnötige" Kommentare in seinen Code )

DateTimeToStr wird nur zum "Konvertieren" von DateTime-Werten benutzt (Tage = ganzzahliger Anteil und Nachkommateil ist Stunden/Minuten/Sekunden ... bzw. "Tage" seit Anfang)
Mal "24" (die Fernsehserie) ist das natürlich kein DateTime-Wert mehr, sondern ein Stunden-Wert. (FloatToStr, Format, gerundet und dann IntToStr usw.)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Jan 2015 um 10:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Industrieminuten

  Alt 22. Jan 2015, 10:29
So ungefähr, aber die 24 ist nun der angesprochene Magic Value: da steht eine 24 und niemand weiß, was sie zu bedeuten hat. Aus diesem Grund benutzt man Konstanten mit sprechenden Bezeichnern.
dtDate := ((dtBis - dtVon)*DateUtils.HoursPerDay); So wird einem auch nach Jahren sofort klar, dass das mit Stunden je Tag zu tun hat.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
StepByStep

Registriert seit: 12. Nov 2014
Ort: Schleswig-Holstein
61 Beiträge
 
Delphi 7 Professional
 
#10

AW: Industrieminuten

  Alt 22. Jan 2015, 10:43
Zitat:
Mal "24" (die Fernsehserie) ist das natürlich kein DateTime-Wert mehr, sondern ein Stunden-Wert.
@himitsu Was ist das für eine Fernsehsendung? Ich bin Baujahr '95 Und die Ausgabe soll auch in Stunden erfasst werden, nicht in Minuten. Wobei, naja quasi Stunden, ich hätte gerne Industrieminuten, also eine Stunde = 1, eine halbe Stunde = 0,5

Check, ich probier es gleich mal aus.

Gruß
Jan

Edit: DateUtils.HoursPerDay sind bei mir zwei undeklarierte Bezeichner. Ich habe in den Uses System.DateUtils eingebunden. Bin ich dumm oder sehe ich den Fehler nicht?
Jan

Geändert von StepByStep (22. Jan 2015 um 10:47 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:17 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