[NTP-Server] aktuelles Datum?

Hallöchen!

Ich wollte Fragen, wie ich, wenn ich die NTP-Zeit abgerufen habe auf das aktuelle Datum komme.

Ich habe einige Beispiele gefunden, bei denen z.b. der Wochentag ausgespuckt wird und/oder die Uhrzeit, aber wie berechne ich das aktuelle Datum?

Was ich habe ist folgendes:

Seconds since Jan 1 1900 = 3568212589
Unix time = 1359223789
DayCount = 15731
Day of week = SAT
The UTC time is 18:09:49

Leider fehlt da das Datum =/

Die Berechungen dazu sehen aus dem Beispiel wie folgt aus:

    unsigned long secsSince1900 = highWord << 16 | lowWord;  
    Serial.print(F("Seconds since Jan 1 1900 = " ));
    Serial.println(secsSince1900);               

    // now convert NTP time into everyday time:
    Serial.print(F("Unix time = "));
    // Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
    const unsigned long seventyYears = 2208988800UL;     
    // subtract seventy years:
    unsigned long epoch = secsSince1900 - seventyYears;  
    // print Unix time:
    Serial.println(epoch);                               

    unsigned long dayCount = epoch / 86400UL;
    Serial.print(F("DayCount = "));
    Serial.println(dayCount);

    Serial.print(F("Day of week = "));
    Serial.println(weekday[dayCount%7UL]);    

    // print the hour, minute and second:
    Serial.print(F("The UTC time is "));       // UTC is the time at Greenwich Meridian (GMT)
    Serial.print(((epoch  % 86400L) / 3600)+1); // print the hour (86400 equals secs per day)
    Serial.print(':');  
    if ( ((epoch % 3600) / 60) < 10 ) {
      // In the first 10 minutes of each hour, we'll want a leading '0'
      Serial.print('0');
    }
    Serial.print((epoch  % 3600) / 60); // print the minute (3600 equals secs per minute)
    Serial.print(':'); 
    if ( (epoch % 60) < 10 ) {
      // In the first 10 seconds of each minute, we'll want a leading '0'
      Serial.print('0');
    }
    Serial.println(epoch %60); // print the second
  }

Vieles Danke :stuck_out_tongue:

LG
Chris

sorath: Seconds since Jan 1 1900 = 3568212589 Unix time = 1359223789 DayCount = 15731 Day of week = SAT The UTC time is 18:09:49

Leider fehlt da das Datum =/

Das Datum fehlt nicht, das hast Du gleich zweimal: In "Unixtime" und in "DayCount".

Zwei Möglichkeiten fallen mir auf Anhieb ein: Entweder installierst Du Dir eine Library, in der eine fertige Funktion drin ist, mit deren Hilfe Du beim Aufruf mit der Unixtime das Datum zurückbekommen kannst. Oder Du schreibst Dir so eine Funktion selbst.

Ah gut, danke.

wusste nicht, dass es dazu libraries gibt.

Danke dir!

Gruß Chris

sorath: wusste nicht, dass es dazu libraries gibt.

Im Zweifelsfall reicht die offizielle Arduino Time Library: http://playground.arduino.cc/Code/Time

Kommt aber drauf an, was Du sonst für wilde Werke vorhast.

Danke!

Im Prinzip geht es mir darum, Temperatur mit Uhrzeit und Datum zu loggen. Für jeden Tag soll ein neues Logfile angelegt werden und von 00:00 bis 23:59 soll stündlich mitgeschrieben werden.

Ist das einfacher zu lösen? Ich ruf die Zeit von dem Server ab und wollte das ganze auch für Menschen lesbar mitloggen und wieder ausgeben.

Gruß Chris

Ich habs noch nicht probiert, da mein Arduino kein Netzwerk hat, aber mit SetTime(t) aus der Time-Bibliothek müsste er das NTP-Zeit/Datum als Systemzeit übernehmen. Jedenfalls gibt now() ja auch Sekunden (seit 01.01.1970) aus ...

Dirk

Danke Dirk, vor gerade mal 10 Minuten hab ich das genau damit hinbekommen! :grin:

Das war genau der Richtige Ansatz!

Danke dir!

Gruß Chris

jurs: Im Zweifelsfall reicht die offizielle Arduino Time Library: http://playground.arduino.cc/Code/Time

Danke für den Tipp, habe ich auch noch nicht mitbekommen. Ich hole mir vom NTP-Server jede Stunde die Zeit und über die vergangenen ms seit der letzten Abfrage [millis()] berechne ich die aktuelle Zeit. Dazu ist der Beispielsketch per Udp hilfreich.

Grüße Michael