arduino/libraries/RTC_DCF/DateTime.cpp

243 lines
6.2 KiB
C++
Raw Normal View History

#include "DateTime.h"
/**********************************************************
Konstruktor
**********************************************************/
DateTime::DateTime()
{}
/*---------------------------------------------------------
Name: DateTime
Beschreibung: Konstruktor mit <EFBFBD>bergabe der Datum und Uhrzeit
Eing<EFBFBD>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;
}
/**********************************************************
<EFBFBD>ffentliche Methoden
**********************************************************/
/*---------------------------------------------------------
Name: addSecond
Beschreibung: addiert eine Sekunde auf die aktuell
gespeicherte Zeit inkl. Auswertung aller
<EFBFBD>bertr<EFBFBD>ge
Eing<EFBFBD>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<EFBFBD>ck
Eing<EFBFBD>nge: unsigned char month
Monat f<EFBFBD>r den die Anzahl der Tage gesucht wird
unsigned char year
Jahr in dem sich der Monat befindet
(wird bei der Entscheidung ben<EFBFBD>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<EFBFBD>ck ob das <EFBFBD>bergebene Jahr ein Schaltjahr ist
Hinweis:
Bei der Auswertung wird nur kontrolliert, ob das Jahr
durch 4 teilbar ist.
Eing<EFBFBD>nge: unsigned char year
Jahr, das auf Schaltjahr gepr<EFBFBD>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<EFBFBD>ck
Eing<EFBFBD>nge: char* dateTimeString
enth<EFBFBD>lt am Ende der Funktion die gespeicherte
Zeit (Datum und Uhrzeit)
Mindestgr<EFBFBD><EFBFBD>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<EFBFBD>ck
Eing<EFBFBD>nge: char* dateString
enth<EFBFBD>lt am Ende der Funktion das gespeicherte
Datum
Mindestgr<EFBFBD><EFBFBD>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<EFBFBD>ck
Eing<EFBFBD>nge: char* timeString
enth<EFBFBD>lt am Ende der Funktion die gespeicherte
Uhrzeit
Mindestgr<EFBFBD><EFBFBD>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';
}