unixzeit mit übergabe einer Zeit berechnen

Hallo,
ich möchte zur Berechnung der Unixzeit in Sekunden eine Zeit z.B. 01.01.2019 20:00:00 übergeben, damit ich die Sekunden seit 1970 erhalte.
Letztendlich möchte ich somit die Anzahl von Tagen von zwei versch. Zeiten berechnen.

Ich glaube das müsste mit der timelib.h funktionieren die ich verwende, habe dazu aber keine Doku gefunden bei der es möglich ist eine zeit mit anzugeben.

hat jemand einen Link zur Hand?

Grüße Sepp

now() enthält die Unixzeit und TimeRTCLog.ino könnte ein passendes Beispiel sein.

Meinst du diese TimeRTClog.ino - Beispieldatei von Paul Stoffregen?
Da kann ich keine Antwort auf Sepps Frage finden.

Das Problem ist das recht lokale Format von Sepps Beispielstring "01.01.2019 20:00:00": Ist 01 nun der Monat oder der Tag ? :slight_smile: und warum sind da keine Schrägstriche "01/01/2019"

Immerhin gibt es in der verlinkten Lib

void    setTime(int hr,int min,int sec,int day, int month, int yr);

welche danach mit now() die "unixzeit" (Datentyp time_t) zurückliefert.

Oder man verwendet gleich

time_t makeTime(const tmElements_t &tm);  // convert time elements into time_t

Hallo,
Hast du von der Unixzeit den UNIX- Timestamp und/oder Datum & Uhrzeit als Daten?
Suchst du so etwas?

LOOIIS:
Hallo,
Hast du von der Unixzeit den UNIX- Timestamp und/oder Datum & Uhrzeit als Daten?
Suchst du so etwas?

Fast...den Link kannte ich schon.

Ich habe ja mit now() meinen aktuellen timestamp...ist schon mal gut
Ich brauche aber einen zweiten timestamp jedoch mit einem von mir gewählten Datum was ich in Segmenten oder in einem Struct übergeben kann. Als Ergebnis brauch ich dann den timestamp z.b von 01.01.1970 bis 30.05.2019 20:00:00 uhr

Das ist ja erstmal egal was Monat oder Tag ist...die variablen oder das structübergeben ich dann schon so wie es benötigt wird

Grüsse sepp

Guck mal:

Time(time, &tm);  // break time_t into elements stored in tm struct
makeTime(&tm);         // return time_t  from elements stored in tm struct

Beispiel:

//Zeitstruktur der TimeLib
tmElements_t beginn;      

//beginn definieren
  beginn.Hour = 23;      
  beginn.Minute = 0;
  beginn.Second = 0;

agmue:
now() enthält die Unixzeit und TimeRTCLog.ino könnte ein passendes Beispiel sein.

Fast ...oder ich kann dort an prevEventTime[nbrInputPins]
Irgendwie das Datum und Uhrzeit übergeben...glaub aber das dies nicht geht oder?

LOOIIS:
Guck mal:
GitHub - PaulStoffregen/Time: Time library for Arduino

Time(time, &tm);  // break time_t into elements stored in tm struct

makeTime(&tm);        // return time_t  from elements stored in tm struct




Beispiel:



//Zeitstruktur der TimeLib
tmElements_t beginn;

//beginn definieren
  beginn.Hour = 23;     
  beginn.Minute = 0;
  beginn.Second = 0;

Danke das sieht ganz danach aus was ich suche...unglaublich da war ich ein we lang auf dieser Seite u d sah es nicht...hoffe das es passt

michael_x:
Meinst du diese TimeRTClog.ino - Beispieldatei von Paul Stoffregen?
Da kann ich keine Antwort auf Sepps Frage finden.

Ja, die meine ich. Da sehe ich

duration = timeNow - prevEventTime[i];

als Differenz zweier Zeiten. Danach, so habe ich es verstanden, wäre gefragt worden.

Daraus habe ich ein kleines Testprogramm zusammengestellt:

#include <TimeLib.h>

void setup()
{
  Serial.begin(115200);
  time_t zeit1 = 0;
  time_t zeit2 = 0;
  showTime(zeit1);
  Serial.println();
  showTime(zeit2);
  Serial.println('\n');
  //01.01.2019 20: 00: 00
  int Year = 2019;
  byte Month = 1, Day = 1, Hour = 20, Minute = 0, Second = 0;
  setTime(Hour, Minute, Second, Day, Month, Year);
  zeit1 = now();
  showTime(zeit1);
  Serial.println();
  //18.06.2019 21: 00: 00
  Year = 2019, Month = 6, Day = 18, Hour = 20, Minute = 0, Second = 0;
  setTime(Hour, Minute, Second, Day, Month, Year);
  zeit2 = now();
  showTime(zeit2);
  Serial.println('\n');
  showDuration(zeit2 - zeit1);
}

void loop() {
}

void showTime(time_t t)
{
  // display the given time
  Serial.print(hour(t));
  printDigits(minute(t));
  printDigits(second(t));
  Serial.print(" ");
  Serial.print(day(t));
  Serial.print(" ");
  Serial.print(month(t));
  Serial.print(" ");
  Serial.print(year(t));
}

void printDigits(int digits) {
  // utility function for digital clock display: prints preceding colon and leading 0
  Serial.print(":");
  if (digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

void showDuration(time_t duration)
{
  // prints the duration in days, hours, minutes and seconds
  if (duration >= SECS_PER_DAY) {
    Serial.print(duration / SECS_PER_DAY);
    Serial.print(" day(s) ");
    duration = duration % SECS_PER_DAY;
  }
  if (duration >= SECS_PER_HOUR) {
    Serial.print(duration / SECS_PER_HOUR);
    Serial.print(" hour(s) ");
    duration = duration % SECS_PER_HOUR;
  }
  if (duration >= SECS_PER_MIN) {
    Serial.print(duration / SECS_PER_MIN);
    Serial.print(" minute(s) ");
    duration = duration % SECS_PER_MIN;
  }
  Serial.print(duration);
  Serial.print(" second(s) ");
}

Ob es dem TO hilft, liegt nicht in meiner Beurteilung :slight_smile:

Hinweisen möchte ich auf das Jahr-2038-Problem.

agmue:
Ob es dem TO hilft, liegt nicht in meiner Beurteilung :slight_smile:

Hi Ja, die meine ich. Da sehe ich

duration = timeNow - prevEventTime[i];

als Differenz zweier Zeiten. Danach, so habe ich es verstanden, wäre gefragt worden.

Daraus habe ich ein kleines Testprogramm zusammengestellt:

#include <TimeLib.h>

void setup()
{
  Serial.begin(115200);
  time_t zeit1 = 0;
  time_t zeit2 = 0;
  showTime(zeit1);
  Serial.println();
  showTime(zeit2);
  Serial.println(’\n’);
  //01.01.2019 20: 00: 00
  int Year = 2019;
  byte Month = 1, Day = 1, Hour = 20, Minute = 0, Second = 0;
  setTime(Hour, Minute, Second, Day, Month, Year);
  zeit1 = now();
  showTime(zeit1);
  Serial.println();
  //18.06.2019 21: 00: 00
  Year = 2019, Month = 6, Day = 18, Hour = 20, Minute = 0, Second = 0;
  setTime(Hour, Minute, Second, Day, Month, Year);
  zeit2 = now();
  showTime(zeit2);
  Serial.println(’\n’);
  showDuration(zeit2 - zeit1);
}

void loop() {
}

void showTime(time_t t)
{
  // display the given time
  Serial.print(hour(t));
  printDigits(minute(t));
  printDigits(second(t));
  Serial.print(" “);
  Serial.print(day(t));
  Serial.print(” “);
  Serial.print(month(t));
  Serial.print(” ");
  Serial.print(year(t));
}

void printDigits(int digits) {
  // utility function for digital clock display: prints preceding colon and leading 0
  Serial.print(":");
  if (digits < 10)
    Serial.print(‘0’);
  Serial.print(digits);
}

void showDuration(time_t duration)
{
  // prints the duration in days, hours, minutes and seconds
  if (duration >= SECS_PER_DAY) {
    Serial.print(duration / SECS_PER_DAY);
    Serial.print(" day(s) “);
    duration = duration % SECS_PER_DAY;
  }
  if (duration >= SECS_PER_HOUR) {
    Serial.print(duration / SECS_PER_HOUR);
    Serial.print(” hour(s) “);
    duration = duration % SECS_PER_HOUR;
  }
  if (duration >= SECS_PER_MIN) {
    Serial.print(duration / SECS_PER_MIN);
  derlei Serial.print(” minute(s) “);
    duration = duration % SECS_PER_MIN;
  }
  Serial.print(duration);
  Serial.print(” second(s) ");
}


das kann ich nweisen möchte ich auf das [Jahr-2038-Problem](https://de.wikipedia.org/wiki/Jahr-2038-Problem).

vielen Dank für das Beispiel
aber das kann ich leider nehmen
Grund: ich verwende timealarms.h und bekomme die Uhrzeit via NTP… da kann ich settime nicht einsetzen

Mist

aber die Richtung mit der timelib müsste doch funktionieren oder?

Dann solltest Du Dich mal mit den Libs und den Beispielen dazu beschäftigen.
TimeAlarms ist vom gleichen Autor wie TimeLib. Die arbeiten problemlos zusammen.

Gruß Tommy