Browse Source

add ability to create Zeit objects by unix timestamps

Kolja Strohm 1 year ago
parent
commit
4c18ed236d
2 changed files with 54 additions and 50 deletions
  1. 38 36
      Zeit.cpp
  2. 16 14
      Zeit.h

+ 38 - 36
Zeit.cpp

@@ -75,22 +75,14 @@ using namespace Framework;
 // Privat
 int Uhrzeit::update() // berechnet die neue Zeit
 {
-    int ret = 0;
-    while (sekunde >= 60)
-    {
-        sekunde -= 60;
-        ++minute;
-    }
-    while (minute >= 60)
-    {
-        minute -= 60;
-        ++stunde;
-    }
-    while (stunde >= 24)
-    {
-        stunde -= 24;
-        ++ret;
-    }
+    __int64 mins = sekunde / 60;
+    minute = minute + mins;
+    __int64 hours = (minute) / 60;
+    stunde = stunde + hours;
+    int days = (int)((stunde) / 24);
+    sekunde = sekunde - (mins * 60);
+    minute = minute - (hours * 60);
+    stunde = stunde - (days * 24);
     while (sekunde < 0)
     {
         sekunde += 60;
@@ -104,9 +96,9 @@ int Uhrzeit::update() // berechnet die neue Zeit
     while (stunde < 0)
     {
         stunde += 24;
-        --ret;
+        --days;
     }
-    return ret;
+    return days;
 }
 
 Uhrzeit::Uhrzeit()
@@ -245,19 +237,19 @@ int Uhrzeit::plusUhrzeit(const char* format, Text* zeit)
     return ret;
 }
 
-int Uhrzeit::plusStunde(int stunde) // addiert stunde Stunden
+int Uhrzeit::plusStunde(__int64 stunde) // addiert stunde Stunden
 {
     this->stunde += stunde;
     return update();
 }
 
-int Uhrzeit::plusMinute(int minute) // addiert minute Minuten
+int Uhrzeit::plusMinute(__int64 minute) // addiert minute Minuten
 {
     this->minute += minute;
     return update();
 }
 
-int Uhrzeit::plusSekunde(int sekunde) // addiert sekunde Sekunden
+int Uhrzeit::plusSekunde(__int64 sekunde) // addiert sekunde Sekunden
 {
     this->sekunde += sekunde;
     return update();
@@ -318,19 +310,19 @@ int Uhrzeit::minusUhrzeit(const char* format, Text* zeit)
     return ret;
 }
 
-int Uhrzeit::minusStunde(int stunde) // subtrahiert stunde Stunden
+int Uhrzeit::minusStunde(__int64 stunde) // subtrahiert stunde Stunden
 {
     this->stunde -= stunde;
     return update();
 }
 
-int Uhrzeit::minusMinute(int minute) // subtrahiert minute Minuten
+int Uhrzeit::minusMinute(__int64 minute) // subtrahiert minute Minuten
 {
     this->minute -= minute;
     return update();
 }
 
-int Uhrzeit::minusSekunde(int sekunde) // subtrahiert sekunde Sekunden
+int Uhrzeit::minusSekunde(__int64 sekunde) // subtrahiert sekunde Sekunden
 {
     this->sekunde -= sekunde;
     return update();
@@ -339,17 +331,17 @@ int Uhrzeit::minusSekunde(int sekunde) // subtrahiert sekunde Sekunden
 // constant
 int Uhrzeit::getStunde() const // gibt die Stunde zurück
 {
-    return stunde;
+    return (int)stunde;
 }
 
 int Uhrzeit::getMinute() const // gibt die Minute zurück
 {
-    return minute;
+    return (int)minute;
 }
 
 int Uhrzeit::getSekunde() const // gibt die Sekunde zurück
 {
-    return sekunde;
+    return (int)sekunde;
 }
 
 Text* Uhrzeit::getUhrzeit(
@@ -389,7 +381,7 @@ bool Uhrzeit::istGleich(
 
 bool Uhrzeit::istGleich(const char* format, const char* zeit) const
 {
-    int st = stunde, min = minute, sek = sekunde;
+    int st = (int)stunde, min = (int)minute, sek = (int)sekunde;
     int flen = textLength(format);
     char* ende = 0;
     for (const char* f = format; f < format + flen; ++f)
@@ -486,7 +478,7 @@ bool Uhrzeit::istKleiner(int stunde, int minute, int sekunde) const
 
 bool Uhrzeit::istKleiner(const char* format, const char* zeit) const
 {
-    int st = stunde, min = minute, sek = sekunde;
+    int st = (int)stunde, min = (int)minute, sek = (int)sekunde;
     int flen = textLength(format);
     char* ende = 0;
     for (const char* f = format; f < format + flen; ++f)
@@ -558,7 +550,7 @@ bool Uhrzeit::istLater(int stunde, int minute, int sekunde) const
 
 bool Uhrzeit::istLater(const char* format, const char* zeit) const
 {
-    int st = stunde, min = minute, sek = sekunde;
+    int st = (int)stunde, min = (int)minute, sek = (int)sekunde;
     int flen = textLength(format);
     char* ende = 0;
     for (const char* f = format; f < format + flen; ++f)
@@ -1141,6 +1133,16 @@ Zeit::Zeit()
       uhrzeit(new Uhrzeit())
 {}
 
+//! Erzeugt eine neue Zeit mit den vergangenen sekunden seit 1970.
+Zeit::Zeit(__int64 timestamp)
+    : ReferenceCounter(),
+      datum(new Datum()),
+      uhrzeit(new Uhrzeit())
+{
+    datum->setDatum(1970, 1, 1);
+    plusSekunde(timestamp);
+}
+
 // Destruktor
 Zeit::~Zeit()
 {
@@ -1344,17 +1346,17 @@ void Zeit::plusTag(int tag) // addiert tag Tage
     datum->plusTag(tag);
 }
 
-void Zeit::plusStunde(int stunde) // addiert stunde Stunden
+void Zeit::plusStunde(__int64 stunde) // addiert stunde Stunden
 {
     datum->plusTag(uhrzeit->plusStunde(stunde));
 }
 
-void Zeit::plusMinute(int minute) // addiert minute Minuten
+void Zeit::plusMinute(__int64 minute) // addiert minute Minuten
 {
     datum->plusTag(uhrzeit->plusMinute(minute));
 }
 
-void Zeit::plusSekunde(int sekunde) // addiert sekunde Sekunden
+void Zeit::plusSekunde(__int64 sekunde) // addiert sekunde Sekunden
 {
     datum->plusTag(uhrzeit->plusSekunde(sekunde));
 }
@@ -1448,17 +1450,17 @@ void Zeit::minusTag(int tag) // subtrahiert tag Tage
     datum->minusTag(tag);
 }
 
-void Zeit::minusStunde(int stunde) // subtrahiert stunde Stunden
+void Zeit::minusStunde(__int64 stunde) // subtrahiert stunde Stunden
 {
     datum->plusTag(uhrzeit->minusStunde(stunde));
 }
 
-void Zeit::minusMinute(int minute) // subtrahiert minute Minuten
+void Zeit::minusMinute(__int64 minute) // subtrahiert minute Minuten
 {
     datum->plusTag(uhrzeit->minusMinute(minute));
 }
 
-void Zeit::minusSekunde(int sekunde) // subtrahiert sekunde Sekunden
+void Zeit::minusSekunde(__int64 sekunde) // subtrahiert sekunde Sekunden
 {
     datum->plusTag(uhrzeit->minusSekunde(sekunde));
 }

+ 16 - 14
Zeit.h

@@ -19,7 +19,7 @@ namespace Framework
     class Uhrzeit : public virtual ReferenceCounter
     {
     private:
-        int stunde, minute, sekunde;
+        __int64 stunde, minute, sekunde;
         int update();
 
     public:
@@ -107,19 +107,19 @@ namespace Framework
         //! \return Die Anzahl übriger Tage.
         //! Beispiel: Alte Zeit: 20:50:30, plusStunde( 10 ); return 1,
         //! gespeicherte Zeit: 6:50:30
-        DLLEXPORT int plusStunde(int stunde);
+        DLLEXPORT int plusStunde(__int64 stunde);
         //! errechnet die Summe von dieser und einer anderen Uhrzeit und
         //! speichert diese. \param minute die draufzurechnenden Minuten.
         //! \return Die Anzahl übriger Tage.
         //! Beispiel: Alte Zeit: 23:50:30, plusMinute( 11 ); return 1,
         //! gespeicherte Zeit: 00:01:30
-        DLLEXPORT int plusMinute(int minute);
+        DLLEXPORT int plusMinute(__int64 minute);
         //! errechnet die Summe von dieser und einer anderen Uhrzeit und
         //! speichert diese. \param sekunde die draufzurechnenden Sekunden.
         //! \return Die Anzahl übriger Tage.
         //! Beispiel: Alte Zeit: 23:59:30, plusSekunde( 40 ); return 1,
         //! gespeicherte Zeit: 00:00:10
-        DLLEXPORT int plusSekunde(int sekunde);
+        DLLEXPORT int plusSekunde(__int64 sekunde);
         //! zieht eine gegebene Uhrzeit von dieser ab und speichert das
         //! Ergebnis. \param zeit Die Uhrzeit, die von dieser abgezogen werden
         //! soll. \return Die Anzahl übriger Tage. Beispiel Alte Zeit: 10:40:18,
@@ -154,19 +154,19 @@ namespace Framework
         //! \return Die Anzahl übriger Tage.
         //! Beispiel Alte Zeit: 10:40:18, minusStunde( 19 ); return -1,
         //! gespeicherte Zeit: 15:40:18
-        DLLEXPORT int minusStunde(int stunde);
+        DLLEXPORT int minusStunde(__int64 stunde);
         //! zieht eine gegebene Zeit von dieser ab und speichert das Ergebnis.
         //! \param minute Die abzuziehenden Minuten.
         //! \return Die Anzahl übriger Tage.
         //! Beispiel Alte Zeit: 00:40:18, minusStunde( 50 ); return -1,
         //! gespeicherte Zeit: 23:50:18
-        DLLEXPORT int minusMinute(int minute);
+        DLLEXPORT int minusMinute(__int64 minute);
         //! zieht eine gegebene Zeit von dieser ab und speichert das Ergebnis.
         //! \param sekunde Die abzuziehenden Sekunden.
         //! \return Die Anzahl übriger Tage.
         //! Beispiel Alte Zeit: 00:00:20, minusStunde( 50 ); return -1,
         //! gespeicherte Zeit: 23:59:30
-        DLLEXPORT int minusSekunde(int sekunde);
+        DLLEXPORT int minusSekunde(__int64 sekunde);
 
         //! gibt die Stunde zurück.
         DLLEXPORT int getStunde() const;
@@ -523,8 +523,10 @@ namespace Framework
         Uhrzeit* uhrzeit;
 
     public:
-        //! Erzeugt ein neues Zeichnung mit den Standartwerten 0.0.0 0:0:0.
+        //! Erzeugt eine neue Zeit mit den Standartwerten 0.0.0 0:0:0.
         DLLEXPORT Zeit();
+        //! Erzeugt eine neue Zeit mit den vergangenen sekunden seit 1970.
+        DLLEXPORT Zeit(__int64 timestamp);
         //! Löscht das aktuelle Zeichnung.
         DLLEXPORT ~Zeit();
         //! Ändert die gespeicherte Zeit durch kopieren der Werte aus (zeit).
@@ -606,13 +608,13 @@ namespace Framework
         DLLEXPORT void plusTag(int tag);
         //! Addiert die übergebene Zeit und speichert das Ergebnis.
         //! \param stunde Die zu addierende Stunde.
-        DLLEXPORT void plusStunde(int stunde);
+        DLLEXPORT void plusStunde(__int64 stunde);
         //! Addiert die übergebene Zeit und speichert das Ergebnis.
         //! \param minute Die zu addierende Minute.
-        DLLEXPORT void plusMinute(int minute);
+        DLLEXPORT void plusMinute(__int64 minute);
         //! Addiert die übergebene Zeit und speichert das Ergebnis.
         //! \param sekunde Die zu addierende Sekunde.
-        DLLEXPORT void plusSekunde(int sekunde);
+        DLLEXPORT void plusSekunde(__int64 sekunde);
         //! Zieht die übergebene Zeit ab und speichert das Ergebnis.
         //! \param zeit Die abzuziehende Zeit.
         DLLEXPORT void minusZeit(Zeit* zeit);
@@ -648,13 +650,13 @@ namespace Framework
         DLLEXPORT void minusTag(int tag);
         //! Zieht die übergebene Zeit ab und speichert das Ergebnis.
         //! \param stunde Die abzuziehende Stunde.
-        DLLEXPORT void minusStunde(int stunde);
+        DLLEXPORT void minusStunde(__int64 stunde);
         //! Zieht die übergebene Zeit ab und speichert das Ergebnis.
         //! \param minute Die abzuziehende Minute.
-        DLLEXPORT void minusMinute(int minute);
+        DLLEXPORT void minusMinute(__int64 minute);
         //! Zieht die übergebene Zeit ab und speichert das Ergebnis.
         //! \param sekunde Die abzuziehende Sekunde.
-        DLLEXPORT void minusSekunde(int sekunde);
+        DLLEXPORT void minusSekunde(__int64 sekunde);
         //! Gibt die gespeicherte Zeit als Text zurück.
         //! \param format Eine Zeichenkette, die angibt in welcher Form die neue
         //! Zeit zurückgegeben werden soll. y=Jahr, m=Monat, d=Tag, h=Stunde,