Pages: [1]   Go Down
 Author Topic: [NTP-Server] aktuelles Datum?  (Read 1049 times) 0 Members and 1 Guest are viewing this topic.
Offline
Newbie
Karma: 0
Posts: 40
 « on: January 26, 2013, 01:23:01 pm » Bigger Smaller 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

LG
Chris
 Logged

Germany S-H
Offline
Karma: 143
Posts: 2995
 « Reply #1 on: January 26, 2013, 01:32:03 pm » Bigger Smaller 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
Newbie
Karma: 0
Posts: 40
 « Reply #2 on: January 26, 2013, 01:35:31 pm » Bigger Smaller Reset

Ah gut, danke.

wusste nicht, dass es dazu libraries gibt.

Danke dir!

Gruß
Chris
 Logged

Germany S-H
Offline
Karma: 143
Posts: 2995
 « Reply #3 on: January 26, 2013, 01:45:04 pm » Bigger Smaller 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
Newbie
Karma: 0
Posts: 40
 « Reply #4 on: January 26, 2013, 01:50:00 pm » Bigger Smaller 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
Jr. Member
Karma: 2
Posts: 94
 « Reply #5 on: January 26, 2013, 04:53:45 pm » Bigger Smaller 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
Newbie
Karma: 0
Posts: 40
 « Reply #6 on: January 26, 2013, 04:56:32 pm » Bigger Smaller Reset

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

Das war genau der Richtige Ansatz!

Danke dir!

Gruß
Chris
 Logged

Offline
Jr. Member
Karma: 4
Posts: 97
 « Reply #7 on: January 27, 2013, 03:58:36 am » Bigger Smaller 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