243 lines
6.2 KiB
C++
243 lines
6.2 KiB
C++
#include "DateTime.h"
|
|
|
|
/**********************************************************
|
|
Konstruktor
|
|
**********************************************************/
|
|
DateTime::DateTime()
|
|
{}
|
|
|
|
|
|
/*---------------------------------------------------------
|
|
Name: DateTime
|
|
|
|
Beschreibung: Konstruktor mit Übergabe der Datum und Uhrzeit
|
|
|
|
Eingänge: unsigned char year
|
|
Jahr
|
|
|
|
unsigned char month
|
|
Monat
|
|
|
|
unsigned char day
|
|
Tag
|
|
|
|
unsigned char weekday
|
|
Wochentag (0: Sonntag, 1: Montag ...)
|
|
|
|
unsigned char hour
|
|
Stunde
|
|
|
|
unsigned char minute
|
|
Minute
|
|
|
|
unsigned char second
|
|
Sekunde
|
|
|
|
Ausgang: void
|
|
---------------------------------------------------------*/
|
|
DateTime::DateTime( unsigned char year, unsigned char month, unsigned char day, unsigned char weekday,
|
|
unsigned char hour, unsigned char minute, unsigned char second)
|
|
{
|
|
this->year = year;
|
|
this->month = month;
|
|
this->day = day;
|
|
this->weekday = weekday;
|
|
this->hour = hour;
|
|
this->minute = minute;
|
|
this->second = second;
|
|
}
|
|
|
|
/**********************************************************
|
|
öffentliche Methoden
|
|
**********************************************************/
|
|
|
|
/*---------------------------------------------------------
|
|
Name: addSecond
|
|
|
|
Beschreibung: addiert eine Sekunde auf die aktuell
|
|
gespeicherte Zeit inkl. Auswertung aller
|
|
Überträge
|
|
|
|
Eingänge: void
|
|
|
|
Ausgang: void
|
|
---------------------------------------------------------*/
|
|
void DateTime::addSecond(void)
|
|
{
|
|
this->second++;
|
|
|
|
if(this->second >= 60)
|
|
{
|
|
this->second = 0;
|
|
this->minute++;
|
|
|
|
if(this->minute >= 60)
|
|
{
|
|
this->minute = 0;
|
|
this->hour++;
|
|
|
|
if(this->hour >= 24)
|
|
{
|
|
this->hour = 0;
|
|
this->day++;
|
|
|
|
this->weekday = (this->weekday + 1) % 7;
|
|
|
|
if(this->day >= daysInMonth(month, year))
|
|
{
|
|
this->day = 1;
|
|
this->month++;
|
|
|
|
if(this->month > 12)
|
|
{
|
|
this->month = 1;
|
|
this->year++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/*---------------------------------------------------------
|
|
Name: daysInMonth
|
|
|
|
Beschreibung: gibt die Anzahl der Tages eines Monats zurück
|
|
|
|
Eingänge: unsigned char month
|
|
Monat für den die Anzahl der Tage gesucht wird
|
|
|
|
unsigned char year
|
|
Jahr in dem sich der Monat befindet
|
|
(wird bei der Entscheidung benötigt, ob
|
|
der Februar 28 oder 29 Tage hat)
|
|
|
|
Ausgang: unsigned char
|
|
Anzahl der Monatstage
|
|
---------------------------------------------------------*/
|
|
unsigned char DateTime::daysInMonth(unsigned char month, unsigned char year)
|
|
{
|
|
unsigned char days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
|
unsigned char daysInMonth = days[month];
|
|
|
|
if(month == 2 && isLeapyear(year))
|
|
{
|
|
daysInMonth = 29;
|
|
}
|
|
|
|
return daysInMonth;
|
|
}
|
|
|
|
/*---------------------------------------------------------
|
|
Name: isLeapyear
|
|
|
|
Beschreibung: gibt zurück ob das übergebene Jahr ein Schaltjahr ist
|
|
|
|
Hinweis:
|
|
Bei der Auswertung wird nur kontrolliert, ob das Jahr
|
|
durch 4 teilbar ist.
|
|
|
|
Eingänge: unsigned char year
|
|
Jahr, das auf Schaltjahr geprüft werden soll
|
|
(Angabe als 2stelliger Wert)
|
|
|
|
Ausgang: unsigned char
|
|
Jahr ist ein Schaltjahr?
|
|
|
|
0: kein Schaltjahr
|
|
1: Schaltjahr
|
|
---------------------------------------------------------*/
|
|
unsigned char DateTime::isLeapyear(unsigned char year)
|
|
{
|
|
unsigned char leapyear = 0;
|
|
|
|
if(year & 0x03 == 0)
|
|
{
|
|
leapyear = 1;
|
|
}
|
|
|
|
return leapyear;
|
|
}
|
|
|
|
/*---------------------------------------------------------
|
|
Name: getDateTimeString
|
|
|
|
Beschreibung: gibt die gespeicherte Zeit als Zeichenkette
|
|
zurück
|
|
|
|
Eingänge: char* dateTimeString
|
|
enthält am Ende der Funktion die gespeicherte
|
|
Zeit (Datum und Uhrzeit)
|
|
|
|
Mindestgröße: 18 Byte
|
|
|
|
Ausgabeformat: dd.MM.yy-hh:mm:ss
|
|
|
|
Ausgang: void
|
|
---------------------------------------------------------*/
|
|
void DateTime::getDateTimeString(char* dateTimeString)
|
|
{
|
|
getDateString(dateTimeString);
|
|
|
|
dateTimeString[8] = '-';
|
|
|
|
getTimeString(dateTimeString + 9);
|
|
}
|
|
|
|
/*---------------------------------------------------------
|
|
Name: getDateString
|
|
|
|
Beschreibung: gibt das gespeicherte Datum als Zeichenkette
|
|
zurück
|
|
|
|
Eingänge: char* dateString
|
|
enthält am Ende der Funktion das gespeicherte
|
|
Datum
|
|
|
|
Mindestgröße: 9 Byte
|
|
|
|
Ausgabeformat: dd.MM.yy
|
|
|
|
Ausgang: void
|
|
---------------------------------------------------------*/
|
|
void DateTime::getDateString(char* dateString)
|
|
{
|
|
dateString[0] = (this->day / 10) + '0';
|
|
dateString[1] = (this->day % 10) + '0';
|
|
dateString[2] = '.';
|
|
dateString[3] = (this->month / 10) + '0';
|
|
dateString[4] = (this->month % 10) + '0';
|
|
dateString[5] = '.';
|
|
dateString[6] = (this->year / 10) + '0';
|
|
dateString[7] = (this->year % 10) + '0';
|
|
dateString[8] = '\n';
|
|
}
|
|
|
|
/*---------------------------------------------------------
|
|
Name: getTimeString
|
|
|
|
Beschreibung: gibt die gespeicherte Uhrzeit als Zeichenkette
|
|
zurück
|
|
|
|
Eingänge: char* timeString
|
|
enthält am Ende der Funktion die gespeicherte
|
|
Uhrzeit
|
|
|
|
Mindestgröße: 9 Byte
|
|
|
|
Ausgabeformat: hh:mm:ss
|
|
|
|
Ausgang: void
|
|
---------------------------------------------------------*/
|
|
void DateTime::getTimeString(char* timeString)
|
|
{
|
|
timeString[0] = (this->hour / 10) + '0';
|
|
timeString[1] = (this->hour % 10) + '0';
|
|
timeString[2] = ':';
|
|
timeString[3] = (this->minute / 10) + '0';
|
|
timeString[4] = (this->minute % 10) + '0';
|
|
timeString[5] = ':';
|
|
timeString[6] = (this->second / 10) + '0';
|
|
timeString[7] = (this->second % 10) + '0';
|
|
timeString[8] = '\n';
|
|
}
|