Der Ansatz klingt sehr gut, nur die Umsetzung bereitet mir weiterhin Kopfzerbrechen...
in time.h wird auf eine Funktion verwiesen, die mktime heißt.
Nach einigem Testen habe ich herausgefunden, dass Sie genau das Gesuchte tut.
void setup() {
// Serialschnittstelle für Debug
Serial.begin(115200);
//display.init();
Start_WiFi();
//Kalender_Wochenansicht_vorbereiten();
Kalendereintrag_pruefen("20180613T133000Z","20180613T150000Z","C");
}
void Start_WiFi()
{
WiFi.begin(Wifi_ssid, Wifi_password);
delay(2000);
configTime(3600, 3600, "pool.ntp.org");
delay(20);
if (!getLocalTime(&Datum))
{
Serial.println("Fehler!");
}
else
{
Serial.println(&Datum, "%A, %B %d %Y %H:%M:%S");
}
}
...
void Kalendereintrag_pruefen(String Start, String Ende, String Beschreibung)
{
//mktime = UNIX-Zeit: Sekunden seit 01.01.1970 00:00:00
//Aktuelle Zeit abfragen
struct tm Heute;
Heute = Datum;
//Auf Tagesanfang stellen
Heute.tm_hour = 0;
Heute.tm_min = 0;
Heute.tm_sec = 0;
time_t HeuteUNIX = mktime(&Heute);
//Event Zeitstempel erstellen
struct tm Eventstart, Eventende;
Serial.println(Datum.tm_year);
Serial.println(Datum.tm_mon);
Serial.println(Datum.tm_mday);
Serial.println(Datum.tm_hour);
Serial.println(Datum.tm_min);
Serial.println(Datum.tm_sec);
Serial.println(Ende.substring(0,4));
Serial.println(Ende.substring(4,6));
Serial.println(Ende.substring(6,8));
Serial.println(Ende.substring(9,11));
Serial.println(Ende.substring(11,13));
Serial.println(Ende.substring(13,15));
//Eventstart
Eventstart.tm_year = (Start.substring(0,4).toInt()-1900);
Eventstart.tm_mon = (Start.substring(4,6).toInt()-1);
Eventstart.tm_mday = Start.substring(6,8).toInt();
Eventstart.tm_hour = Start.substring(9,11).toInt();
Eventstart.tm_min = Start.substring(11,13).toInt();
Eventstart.tm_sec = Start.substring(13,15).toInt();
time_t EventstartUNIX = mktime(&Eventstart);
//Eventende
Eventende.tm_year = (Ende.substring(0,4).toInt()-1900);
Eventende.tm_mon = (Ende.substring(4,6).toInt()-1);
Eventende.tm_mday = Ende.substring(6,8).toInt();
Eventende.tm_hour = Ende.substring(9,11).toInt();
Eventende.tm_min = Ende.substring(11,13).toInt();
Eventende.tm_sec = Ende.substring(13,15).toInt();
time_t EventendeUNIX = mktime(&Eventende);
time_t JetztUNIX = mktime(&Datum);
Serial.print("Jetzt: ");
Serial.println(JetztUNIX);
Serial.print("Heute: ");
Serial.println(HeuteUNIX);
Serial.print("Start: ");
Serial.println(EventstartUNIX);
Serial.print("Ende: ");
Serial.println(EventendeUNIX);
}
Das Ergebnis in der Konsole sieht so aus:
Sunday, June 24 2018 17:09:16
118
5
24
17
9
16
2018
06
13
15
00
00
Jetzt: 1529852956
Heute: 1529791200
Start: 1528889400
Ende: 1528898400
Nach etwas testen habe ich herausgefunden, dass die Lib mit einem Versatz bis 1900 arbeitet und die Monate 0-basiert sind.
Rein von der Theorie passt das auch alles so, ABER aus einem mir überhaupt nicht verständlichen Grund ist die letzte berechnete Zeit um eine Stunde falsch.
Entweder habe ich gerade ein massives Brett vorm Kopf oder da stimmt was nicht...