Pages: [1]   Go Down
Author Topic: [NTP-Server] aktuelles Datum?  (Read 1002 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

Code:
    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  smiley-razz

LG
Chris
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 136
Posts: 2866
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah gut, danke.

wusste nicht, dass es dazu libraries gibt.

Danke dir!


Gruß
Chris
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 136
Posts: 2866
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

northern germany
Offline Offline
Jr. Member
**
Karma: 2
Posts: 94
Ausbildung: Funkmechaniker, Systemadministrator
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

using arduino leonardo
--
tomorrow today will only be yesterday, so live your life today!

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke Dirk, vor gerade mal 10 Minuten hab ich das genau damit hinbekommen!  smiley-mr-green

Das war genau der Richtige Ansatz!


Danke dir!


Gruß
Chris
Logged

Offline Offline
Jr. Member
**
Karma: 4
Posts: 97
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: