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
Differenz zwischen Uhrzeiten berechnen
Moderator: Moderatoren
- Martin Altmann
- 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
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
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 :grommit:](./images/smilies/grommit.gif)
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.
- Wolfgang Ciriack
- 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
Wenn du die XbTools hast, schau dir mal die Funktionen TimeToSec() und SecToTime() an.
Viele Grüße
Wolfgang
Wolfgang
- AUGE_OHR
- 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
ElapTime() hiest die S87 Function die es als "Add-on" für v5.x im Source Verzeichniss gab.kasi9 hat geschrieben:Ich möchte gerne die Differenz zwischen zwei Zeiten berechnen
unter Xbase++ findest du die in c:\ALASKA\XPPW32\Source\COMPAT\compat87.prg
gruss by OHR
Jimmy
Jimmy
- Friedhelm
- Cut&Paste-Entwickler
- Beiträge: 46
- Registriert: Sa, 08. Apr 2006 17:20
- Wohnort: Leverkusen
- Kontaktdaten:
Re: Differenz zwischen Uhrzeiten berechnen
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:
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