arduino/libraries/RTC_DCF/DateTime.cpp

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';
}