Datum (String) in int konvertieren

Hallo,

ich habe hier eine Funktion, die mir das Datum ausgibt (dabei wird die Originalzeit, welche von OpenWheaterMap kommt, zuerst in das eigentliche Datum konvertiert):

void printTime(long timestamp) {
  struct tm timeinfo;
  time_t tstamp = (time_t)timestamp;  // Cast timestamp to time_t
  gmtime_r(&tstamp, &timeinfo);
  timeinfo.tm_isdst = 0; // Set daylight saving time to zero
  timestamp = mktime(&timeinfo);  // Convert back to timestamp

  char time_str[20];
  char date_str[20];
  char month_str[6];
  char day_str[6];

  strftime(time_str, sizeof(time_str), "%H:%M:%S", &timeinfo);
  strftime(month_str, sizeof(time_str), "%m", &timeinfo);
  strftime(day_str, sizeof(time_str), "%d", &timeinfo);
  strftime(date_str, sizeof(time_str), "%Y-%m-%d", &timeinfo);

  Serial.println(time_str);
  Serial.println(month_str);
  Serial.println(day_str);
}

Jetzt will ich aber gerne mit dem Datum einige Berechnungen anstellen (z.B. if-statements wie: falls Monat grĂ¶ĂŸer als 2 und Tag kleiner als 10, ist tue dies und jenes). Ich habe schon verschiedene Sachen ausprobiert, um den string in ein int zu konvertieren, aber bislang hat nichts funktioniert ..

Kann jemand helfen?

Im englischen Teil des Forum mĂŒssen die BeitrĂ€ge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Helfen muss man eigentlich nicht, denn die Lösung versteckt sich schon in dem Code, den Du zeigst.

timeinfo.tm_isdst = 0; // Set daylight saving time to zero

Da greifst Du auf das Element tm_isdt der Struktur tm zu.

Und oh Wunder - darin gibt es noch mehr davon, die von Tagen. Monaten und Jahren sowie Stunden, Minuten und Sekunden handeln - die sind alle int und damit lÀsst sich prima rechnen.

Nachzulesen beispielsweise hier.

@wno158 war ein bisschen schneller als ich.

Du brauchst Strings nicht wieder zu "int" konvertieren, weil die "int" Werte schon in der tm Struktur vorliegen.


#include "time.h"

void printTime(long timestamp) {
  struct tm timeinfo;
  time_t tstamp = (time_t)timestamp;  // Cast timestamp to time_t
  gmtime_r(&tstamp, &timeinfo);

  // https://cplusplus.com/reference/ctime/tm/
  // https://www.unixtimestamp.com/

  // 8:15:15 Uhr
  Serial.println(timeinfo.tm_hour);
  Serial.println(timeinfo.tm_min);
  Serial.println(timeinfo.tm_sec);
}


void setup() {
  Serial.begin(115200);
  printTime(1739693715);
}

void loop() {}

Sorry @UKHeliBob. I clicked wrong.

Vielen Dank fĂŒr eure schnellen Antworten! Da hĂ€tte ich ja eigentlich auch selbst drauf kommen können :slight_smile:

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.