Differenz zwischen Uhrzeiten berechnen

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
kasi9
Rookie
Rookie
Beiträge: 1
Registriert: Di, 05. Okt 2010 22:35
Kontaktdaten:

Differenz zwischen Uhrzeiten berechnen

Beitrag von kasi9 »

Hey, dachte nicht, daß es immernoch Leute gibt, die sich mit Clipper beschäftigen, HUT AB! freut mich.
Bis Ende der 80er habe ich selbst damit einige Programme gebaut, teilweise arbeite ich noch immer mit ihnen.

Um genau so eines geht es nun:
Ich möchte gerne die Differenz zwischen zwei Zeiten berechnen, ich bekomme es jedoch nicht hin, da ich die nötigen Befehle nicht mehr kenne. Ich habe schon das Buch Clipper 5.2 Sybex raus gekramt und gestöbert, aber ich finde es nicht.
Kann mir da jemand auf die Sprünge helfen? Bin schwer eingerostet!

Gruß
Kasi
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16586
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 116 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Differenz zwischen Uhrzeiten berechnen

Beitrag von Martin Altmann »

Moin,
geht es jetzt um Clipper? Oder um Xbase++?
Dann würde ich das in das Clipper-Unterforum verschieben.
Differenz zwischen zwei Zeiten: Datum1 - Datum2 ist die Anzahl an Tagen.
Die Uhrzeit selber kann man so (glaube ich) nicht berechnen. Da musst Du die Stunden in Minuten umrechnen und dazwischen die Differenz bilden und das dann wieder in eine Uhrzeit (Stunden:Minuten) zurückrechnen.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2950
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 14 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Differenz zwischen Uhrzeiten berechnen

Beitrag von Wolfgang Ciriack »

Wenn du die XbTools hast, schau dir mal die Funktionen TimeToSec() und SecToTime() an.
Viele Grüße
Wolfgang
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12913
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Differenz zwischen Uhrzeiten berechnen

Beitrag von AUGE_OHR »

kasi9 hat geschrieben:Ich möchte gerne die Differenz zwischen zwei Zeiten berechnen
ElapTime() hiest die S87 Function die es als "Add-on" für v5.x im Source Verzeichniss gab.
unter Xbase++ findest du die in c:\ALASKA\XPPW32\Source\COMPAT\compat87.prg
gruss by OHR
Jimmy
Benutzeravatar
Friedhelm
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 46
Registriert: Sa, 08. Apr 2006 17:20
Wohnort: Leverkusen
Kontaktdaten:

Re: Differenz zwischen Uhrzeiten berechnen

Beitrag von Friedhelm »

Für diejenigen die es interessiert:
in der tbxAppclass befinden sich eine Klasse, die einen Zeitstempel representiert (TimeStamp). mit dieser Klasse lassen sich nicht nur umfangreichen Datums-/Zeitrechnungen vornehmen, sonder auch Intervalle verechnen, die sich selbst synchromisieren. Selbstverständlich lassen sich auch Datums-/Zeit-Differenzen berechnen und als String oder numerische Werte ausgeben.
Die Basis bilden dabei Rechenroutinen, die die Tage seit dem 31.12.1899 und die Sekunden, die seit Mitternacht verstrichen sind berücksichtigen.

Beispiel:
xDT := tbxDateTime():New()
xDT:Now() // optional - stellt das aktuelle Datum / Uhrzeit ein
? xDT:Date // 12.10.2010
? xDT:Time // 16:25:33
xDT:AddHours(56)
? xDT:Date // 15.10.2010
? xDT:Time // 00:25:33
? xDT:DiffToStr() // 55h 59m 59s

viel Spaß beim ausprobieren!
Hier der Souce der Klasse:

Code: Alles auswählen

*-- PROGRAM FILE ----------------------------------------------------------------------*
*  Application: tbxAppClass                                                            *
*  Description: DateTime Class                                                         *
*    File Name: DateTime_01.prg                                                        *
*       Author: Friedhelm Goeder      goe                                              *
* Date created: 06.03.2009                                                             *
* Time created: 09:30:49                                                               *
*    Copyright: (c) 2010 by TOBAX Software GmbH - Germany                              *
*   *****************************************************************************      *
*   *  IMPORTAND NOTE:                                                          *      *
*   *  The use of this class library ¡s free for ADS customers from TOBAX.      *      *
*   *  The usage oft this class library will done on your own risk.             *      *
*   *  TOBAX CAN NOT GARANTEE THAT THIS CLASS LIBARARY IS FREE OF ERRORS!       *      *
*   *****************************************************************************      *
* Changes:                                                                             *
* Date          Changes                                                                *
* 12.01.2010    New Access/Assign Method AsString                                      *
*               Sets or Gets the date/time as string with the date format, set by      *
*               SET DATE FORMAT TO...                                                  *
* 12.01.2010    Method init accept now an initial date/time string for set the         *
*               Date-Time value. The string can be formatted with DTOS or by           *
*               SET DATE FORMAT TO setting.                                            *
*--------------------------------------------------------------------------------------*
#include "Set.ch"
#include "tbxCommon.ch"
// #pragma Library("XbtBase1.Lib")

*************************************************************************************
* tbxDateTime
*************************************************************************************
* Konstanten für die Datums-, Unzeit und DatumUhrzeit Begrenzungszeichen
#define DELIMITER_DATE        "-"
#define DELIMITER_TIME        ":"
#define DELIMITER_DATETIME    " "

* Konstanten für die Intervall berechnung
#define INTERVAL_TYPE_SECONDLY     0        // param 1 = num Count of second cycles  min 10 Seconds max   param 2 = TDateTime
#define INTERVAL_TYPE_MINUTLY      1        // param 1 = num Count of minute cycles                       param 2 = cTime next cycle
#define INTERVAL_TYPE_HOURLY       2        // param 1 = num Count of hour cycles                         param 2 = cTime next cycle
#define INTERVAL_TYPE_DAILY        3        // param 1 = num Count of day cyles                           param 2 = cDateTime next cycle
#define INTERVAL_TYPE_WEEKLY       4        // param 1 = num Count of week to start                       param 2 = cDateTime next cycle
#define INTERVAL_TYPE_MONTHLY      5        // param 1 = num Count of month to start                      param 2 = cDateTime next cycle
#define INTERVAL_TYPE_ULTIMO       6        // param 1 = num Count of Month last of Month)                param 2 = cDateTime next cycle

*-- CLASS DEFINITION ---------------------------------------------------------*
*         Name: tbxDateTime                                                   *
*  Description: Klasse für Datums und Uhrzeitberechnungen                     *
*       Author: Friedhelm Goeder      goe                                     *
* Date created: 06.03.2009            Date updated: þ06.03.2009               *
* Time created: 09:30:49              Time updated: þ09:30:49                 *
*    Copyright: TOBAX Software GmbH - Germany                                 *
*-----------------------------------------------------------------------------*
* Parent class: None                                                          *
*     See Also:                                                               *
*-----------------------------------------------------------------------------*
CLASS tbxDateTime
   PROTECTED:
     VAR cTimeDelim                             // Begrenzungszeichen für Uhrzeit
     VAR cDateDelim                             // Begrenzungszeichen für Datum
     VAR cDateTimeDelim                         // Begrenzungszeichen zwischen Datum und Uhrzeit
     VAR dBaseDate                              // Basisdatum für die Datumsberechnung 01.01.1900
     VAR nDays                                  // Anzahl der Tage zwischen Basisdatum und aktuellem Datu,
     VAR nSeconds                               // Anzahl der Sekunden die seit Mitternacht verstrichen sind
   EXPORTED:
     METHOD Init                                // Initialisierung der Klasse und Vorbelegung mit aktuellem Zeitstempel
     METHOD Now                                 // Setzt den interne Wert des Zeitstemplel auf aktuelles Datum und Uhrzeit
     ACCESS ASSIGN METHOD Year                  // (N) Instanzvariable zum lesen/setzen des Jahreswertes
     ACCESS ASSIGN METHOD Month                 // (N) Instanzvariable zum lesen/setzen des Monatswertes
     ACCESS ASSIGN METHOD Day                   // (N) Instanzvariable zum lesen/setzen des Tageswertes
     ACCESS ASSIGN METHOD Hour                  // (N) Instanzvariable zum lesen/setzen des Stundenwertes
     ACCESS ASSIGN METHOD Minute                // (N) Instanzvariable zum lesen/setzen des Minutenwertes
     ACCESS ASSIGN METHOD Second                // (N) Instanzvariable zum lesen/setzen des Sekundenwertes
     ACCESS ASSIGN METHOD Date                  // (D) Instanzvariable zum lesen/setzen des Datumswertes
     ACCESS ASSIGN METHOD Time                  // (C) Instanzvariable zum lesen/setzen des Zeitwertes
     ACCESS ASSIGN METHOD DateTime              // (C) Instanzvariabel zum lesen/setzen des Zeitstemples im Format "YYYY-MM-DD hh:mm:ss"
     ACCESS ASSIGN METHOD AsString              // (C) Instanzvariabel zum lesen/setzen des Zeitstemples im eingestelltem SET DATE <Format>  + hh:mm:ss"
     METHOD Add                                 // Erhöhen / Erniedrigen der Tage, Minuten und Sekunden
     METHOD AddYear                             // Erhöhen / Erniedrigen des Jahreswertes
     METHOD AddMonth                            // Erhöhen / Erniedrigen des Monatswertes
     METHOD AddWeeks                            // Erhöhen / Erniedrigen des Wochenwertes
     METHOD AddDays                             // Erhöhen / Erniedrigen des Tageswertes
     METHOD AddHours                            // Erhöhen / Erniedrigen des Stundenwertes
     METHOD AddMinutes                          // Erhöhen / Erniedrigen des Minutenwertes
     METHOD AddSeconds                          // Erhöhen / Erniedrigen des Sekundenwertes
     METHOD SetNextInterval                     // Berechnen eines nächsten Intervalles
     METHOD DiffTo                              // Berechung der Tages und Sekundendifferenz zu Referenzdatum
     METHOD DiffToStr                           // Liefert einen String der die Differen zweier Zeitpunkte angibt im Format xxTg xxh xxm xxs
     METHOD DiffToNum                           // Liefert die Differenz zweier Datis als numerischen Float-Wert in Form <Tage>,<Sekunden>
     INLINE ACCESS METHOD Days                  // interne Instanzvariable für den Zugriff auf Tage seit BaseDate
        RETURN ::nDays
     INLINE ACCESS METHOD Seconds               // interne Instanzvariable für den Zugriff auf Sekunden seit Mitternacht
        RETURN ::nSeconds
ENDCLASS

METHOD tbxDateTime:Init(cDateTime)
   ::cTimeDelim     := DELIMITER_TIME
   ::cDateDelim     := DELIMITER_DATE
   ::cDateTimeDelim := DELIMITER_DATETIME
   ::dBaseDate := StoD("18991201")
   IF !Assigned( cDateTime)
      ::Now()
   ELSEIF At(::cDateDelim, cDateTime)  > 0
      ::DateTime := cDateTime
   ELSEIF At(Subs(DToC(Date()),3,1), cDateTime) > 0
      ::AsString := cDateTime
   ENDIF
RETURN self

METHOD tbxDateTime:Now()
   ::nDays := Date() - ::dBaseDate
   ::nSeconds := Int(Seconds())
RETURN self

METHOD tbxDateTime:Year( nYear )
LOCAL dX, cX
   IF nYear == NIL
      RETURN Year( ::dBaseDate + ::nDays )
   ENDIF
   // Achtung Schaltjahr
   cX := StrZero(nYear,4)+Subs(DtoS(::Date),5)
   dX := StoD(cX)
   ::nDays := dX - ::dBaseDate
//   ::nDays := ( StoD( StrZero(nYear,4)+ "0101" ) - ::dBaseDate ) - ::dBaseDate
RETURN

METHOD tbxDateTime:Month( nMonth )
LOCAL dCur
   IF nMonth == NIL
      RETURN Month( ::dBaseDate + ::nDays )
   ENDIF
   dCur := SToD(Stuff( DToS( ::dBaseDate + ::nDays ), 5, 2, StrZero(nMonth,2)))
   IF !Empty(dCur)
      ::Date := dCur
   ENDIF
RETURN

METHOD tbxDateTime:Day(nDay)
LOCAL dCur
   IF nDay == NIL
      RETURN Day( ::dBaseDate + ::nDays )
   ENDIF
   dCur := SToD(Stuff( DToS( ::dBaseDate + ::nDays ), 7, 2, StrZero(nDay,2)))
   IF !Empty(dCur)
      ::Date := dCur
   ENDIF
RETURN
Gruß Friedhelm
Antworten