AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Zeiten speichern, berechnen

Ein Thema von Sugar · begonnen am 27. Jun 2015 · letzter Beitrag vom 27. Jun 2015
Antwort Antwort
Sugar

Registriert seit: 23. Jul 2012
83 Beiträge
 
#1

Zeiten speichern, berechnen

  Alt 27. Jun 2015, 11:03
Hallo,

ich stehe wieder mal auf dem Schlauch...

Ich will eine Zeit "stoppen" bzw. diverse Zeiten zusammenrechnen.
Zum Hintergrund: Auf Buttonklick soll eine Zeitmessung gestartet werden, die laufende Dauer in einem Label angezeigt werden und diese dann auf einen weiteren Buttonklick gestoppt werden.

Ich fummele jetzt schon diverse Zeit, komme aber nicht voran. Welchen Datentyp sollte ich benutzen um die Zeiten zu speichern? (MS SQL Server 2014), wie addiere ich Zeiten? Und wie kann ich die als "Normalzeit" angezeigten oder gespeicherten Zeiten in Industrieminuten (100 Min/Stunde) umrechnen...

Irgendwie habe ich nach all dem Fummeln voll ein Brett vor dem Kopf...

Gruß und Danke für Tipps
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: Zeiten speichern, berechnen

  Alt 27. Jun 2015, 11:18
Ich nehme gewöhnlich Sekunden, um Zeiten zu speichern. Soll es noch etwas genauer sein, wähle ich Millisekunden. Der Wertebereich kann in Delphi meist locker mit Integer abgedeckt werden, in MsSQL wäre das int.
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#3

AW: Zeiten speichern, berechnen

  Alt 27. Jun 2015, 11:27
Das kommt ein wenig darauf an, wie groß die zu messenden Zeit erwartungsgemäß werden sollen, und welche Genauigkeit am Ende verlangt ist.

Wenn es sich um eine Zeiterfassung handelt (wovon ich mal ausgehe da du von Industrieminuten spricht), kann ich dir mal sagen wie ich das mache.

Bei einer Zeiterfassung, bei der ein Minutenzeitraum erfasst werden soll, kann man nicht grundsätzlich davon ausgehen, dass die eigene Anwendung ohne Unterbrechung vom Start der Erfassung bis zum Ende der Erfassung läuft. Es kann durch aus sein, dass der Anwender diese auch mal kurz beendet bzw. ein anderes Problem auftritt.
Deswegen erfasse ich einen TDAteTime-Wert bei Start der Erfassung und lege mit diesen in einem Feld in einer Datenbank (kann natürlich auch irgendein anderer Speicherort sein) ab. Wenn nun das Ender der Erfassung signalisiert wird, dann erfasse ich den TDatetime-Wert erneut und lege ihn aber in einem anderen Feld ab. Jetzt habe ich 2 TDateTime-Werte, von denen ich z.B. per MinutesBetween die Differenz in Minuten errechnen kann, die ich dann (wenn ich denn will, als Integer in der DB ablegen kann. Aus diesen Minuten kann ich natürlich ohne Probleme in Industrieminuten umrechnen oder das ganze in Stunden/Minuten aufteilen. Es gibt natürlich auch die Funktion SecondsBetween, wenn's Sekundengenau sein soll.
Beide Funktionen liefern einen Int64 zurück, das entspräche dem BigInt in MSSQL.
Da man nun Integerwerte hat, kann die natürlich beliebig addieren oder sonst was mit machen.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.978 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: Zeiten speichern, berechnen

  Alt 27. Jun 2015, 11:53
Noch ein paar Gedanken dazu:
In der Handhabung wird man hier sicher unterscheiden, ob das innerhalb einer DB gehalten werden soll oder alles per Delphicode abgefackelt wird.
In einer DB ist es eigentlich üblich, DateTime Werte zu speichern. Mit denen kann man dann rechnen im SQL Statement oder in Reports.
Select EndDatumZeit- StartDatumZeit from Zeiterfassung where userid = .. Der nächste Punkt ist dann die Darstellung. Unabhängig von der Speicherung der Werte kannst Du immer beliebig das Ausgabeformat wählen, also die Differenz als Industrieminuten, Tage, Jahre, ..
Und nochwas, wenn es um eine Art Messwerterfassung geht und man tatsächlich die Messung pausiert (bspw. weil für einen Produktionsablauf Vorgabezeiten aufgestellt werden müssen), kommt man mit den 2 genannten Feldern nicht sonderlich weit.
Hier könnte man bspw. das Datenmodell so anlegen, das eine Liste von Start/Stop Werten unter einer Mess ID abgelegt werden können. Also eine ID pro Messung, viele Zeitwerte. Damit ist man in der Speicherung unabhängig von der Anzahl der Unterbrechungen.
Gruß, Jo
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Zeiten speichern, berechnen

  Alt 27. Jun 2015, 11:58
@Sugar

Guck dir mal die Funktionen den Unit DateUtils genauer an. Wie der Name schon sagt bietet sie Funktionen zum Thema Datum und Uhrzeit an.

Für dich wären u. U. wichtig MilliSecondsBetween(Time1, Time2) oder SecondsBetween(Time1, Time2) usw. Beide Int64. Damit kannst du den Unterschied zwischen zwei Zeiten ermitteln. Je nach Funktion die Millisekunden, Sekunden, Minuten, Stunden, usw.

Eine Stopuhr lässt sich programmieren in dem du das Now oder Time zur Startzeit merkst und es dann mit Now oder Time der Stopzeit vergleichst. Das sind zwei Zeilen Code.

Umrechnung in Industriezeit wäre (bei Sekunden) Round(Sekunden / 60 * 100) .
  Mit Zitat antworten Zitat
Sugar

Registriert seit: 23. Jul 2012
83 Beiträge
 
#6

AW: Zeiten speichern, berechnen

  Alt 27. Jun 2015, 12:15
Super,euch allen vielen Dank.

CptnNemo hat mir mit der Beschreibung seiner Vorgehensweise einen guten Ansatz geliefert den ich nun einmal in einem Dummy umsetzen werde.

Danke nochmal, Issue ist zunächst mal ausreichend beantwortet.
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#7

AW: Zeiten speichern, berechnen

  Alt 27. Jun 2015, 12:34
Ich speichere mir zu den TDateTime werten in der DB zusätzlich auch noch die MinutesBetween als ganz normal Zeitminuten ab. Der Grund ist, dass ich dann recht bequem im Select per SUM() mir die Zeiten schon als Summe abfragen kann. Man kann natürlich innerhalb der SQL-Abfrage sich die DiffMinuten berechnen lassen, aber ich persönlich finde das so übersichtlicher. Die Umrechnung in Industrieminuten mache ich grundsätzlich immer in der Anwendung.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#8

AW: Zeiten speichern, berechnen

  Alt 27. Jun 2015, 13:49
Der Grund ist, dass ich dann recht bequem im Select per SUM() mir die Zeiten schon als Summe abfragen kann.
Also ich sehe jetzt keine Unbequemlichkeit, per
select sum(datediff(minutes,dateFrom, dateTo)) from Tabelle Wobei das natürlich von der DB abhängt, wie man die Differenz in Minuten ausrechnet. Das Problem mit redundanten Werten ist die vermutlich nicht vorhandene Integrität, denn eine Änderung einer der drei Werte führt zu Inkonsistenzen. Des Weiteren rundest Du ja schon auf Minuten, was sich in der Summierung doch auswirken kann.
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#9

AW: Zeiten speichern, berechnen

  Alt 27. Jun 2015, 13:55
Da hast du natürlich absolut recht. Ich habe ja auch erwähnt, dass man das auch in der SQL-Abfrage machen könnte.
Wenn man das natürlich so macht, dass man die Diff mit in der DB ablegt, dann muss man natürlich sicherstellen, dass bei Änderungen der TDateTime's die Konsistenz wieder hergestellt wird. Letztlich kann man nicht zu 100% (es könnte ja auch einer in der DB den DateTime-Eintrag zu Fuss ändern).
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
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 01:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf