Hallo Leute, meine aufgabe ist es eine Integer zahl bzw float zahl in der UTC_Time form in die UNIXTime umzuwandeln. Meine zeite sieht etwa so aus hhmmss.ss Bsp: 151256.00 ---> 15:22:56 wie kriege ich diese in die unix_time ? gibts dafür schon beispiele denn habe nichts passendes und verständliches gefunden. Über tipps und code schnippsel würde ich mich freuen. vielen dank schonmal, KleinerUniStudent
Unix-Zeit kann eigentlich keine Tageszeit ohne Datumsangabe wiedergeben. Davon mal abgesehen, wo ist das Problem? Unix-Zeit basiert auf Sekunden, eine Stunde hat 3600 Sekunden, eine Minute 60, der Rest ist Grundschulmathematik. Andreas
ja das datum habe ich auch in dieser form dann ddmmyy Bsp.: 040810 ja aber wenn ich das datum habe und es dann in sekunden zurück rechne bis aufs jahr 1970 .... wie weiß ich welches jahr 364 tage hatte und welches 365 ?
Hallo Christoph, entweder nimmst Du Dir einen Stichtag, z.B. Anfang des Jahres, als Bezug und rechnest von da - oder Du musst wirklich durch die Regeln zur Schaltjahrerzeugung durch. So habe ich es gemacht. Nächste Hürde sind die unterschiedlich langen Monate - habe es mit einer Tabelle gelöst. Irgendwo habe ich sicherlich auch noch den Code. Wenn ich mich recht entsinne, entschlüsselt er NTP-Pakete. Gruß Jens
Christoph S. schrieb: > ja aber wenn ich das datum habe und es dann in sekunden zurück rechne > bis aufs jahr 1970 .... wie weiß ich welches jahr 364 tage hatte Das ist einfach... kein einziges ;-) > und > welches 365 ? Normale Jahre haben 365, Schaltjahre 366 Tage. Wie wäre es, wenn du deine Werte passend zerlegt in eine "struct tm" (aus <time.h>) einträgst und dann mit mktime() umrechnest? Wenn du es unbedingt zu Fuss erledigen willst, findet sich im bereits von jemand anders verlinkten Wikipedia-Artikel auch ein Algorithmus dafür. Andreas
Andreas Ferber schrieb: >> ja das datum habe ich auch in dieser form dann ddmmyy Bsp.: 040810 >> >> ja aber wenn ich das datum habe und es dann in sekunden zurück rechne >> bis aufs jahr 1970 .... wie weiß ich welches jahr 364 tage hatte > > Das ist einfach... kein einziges ;-) Falsch. Richtig wären alle. ;-)
Thomas schrieb: > Falsch. Richtig wären alle. ;-) Aber nur, wenn die 364 der 2 hier entspricht: First shalt thou take out the Holy Pin, then shalt thou count to three, no more, no less. Three shall be the number thou shalt count, and the number of the counting shall be three. Four shalt thou not count, neither count thou two, excepting that thou then proceed to three. Five is right out. Once the number three, being the third number, be reached, then lobbest thou thy Holy Hand Grenade of Antioch towards thy foe, who being naughty in My sight, shall snuff it.
Thomas schrieb: > Falsch. Richtig wären alle. ;-) Wenn du diesem dünnen Pfad folgen willst, halte ich mit 1582 dagegen, das Jahr hatte nur 355 Tage ;-) Andreas
Hallo Christoph, hier zur Orientierung die Datumsberechnung aus eine NTP-Zeit. Nicht toll, aber für seltene Berechnungen ausreichend. So habe ich es jedenfalls empfunden. Für Unixzeit ist vermutlich nur das Startjahr zu ändern.
1 | char NTP_days[] = {31,28,31,30,31,30,31,31,30,31,30,31}; |
2 | |
3 | int ntp_daysofmonth ( int month, int year ) |
4 | {
|
5 | if ( month == 1 ) { // february |
6 | if ( !(year % 4) && year % 100 ) |
7 | return 29; |
8 | else
|
9 | return 28; |
10 | }
|
11 | else return (int)NTP_days[month]; |
12 | }
|
13 | |
14 | void ntp_date( unsigned long time ) |
15 | {
|
16 | unsigned int day = time / 86400L; |
17 | |
18 | int days; |
19 | int year = 1900; |
20 | int month = 0; |
21 | |
22 | while ( day > (days = ntp_daysofmonth(month, year)) ) { |
23 | day -= days; |
24 | if ( ++month > 11 ) { |
25 | month = 0; |
26 | year++; |
27 | }
|
28 | }
|
29 | |
30 | // lcd_print (0,0,"%2i.%2i.%4i ",day,month+1,year);
|
31 | }
|
Die Berechnung in die andere Richtung sollte daraus ja machbar sein. Na, für die Zeit ist die Sache ja nicht soooo kompliziert...die Stunde hat 3600s, die Minute 60s. Da liegt der Aufwand eher im Auseinandernehmen der vorliegenden Daten. Gruß Jens P.S.: Ja, die Schaltjahresberechnung ist nicht vollständig, reicht aber für dieses Jahrhundert aus.
BTW, da offenbar Sekundengenauigkeit angestrebt wird, fehlt in diesen einfachen Ansätzen (auch dem aus dem Wikipedia-Artikel) die Berücksichtigung von Schaltsekunden. Derzeit (Stand heute) bedeutet das dann eine Abweichung von 24 Sekunden. Der von mir oben erwähnte Ansatz mit mktime() würde das auf vielen Systemen korrekt berücksichtigen, allerdings müsste man vorher sicherstellen, ob auf dem verwendeten System time_t wirklich Unix-Zeit darstellt. Andreas
Andreas Ferber schrieb: > Wie wäre es, wenn du deine Werte passend zerlegt in eine "struct tm" > (aus <time.h>) einträgst Dafür würde sich die Funktion strptime anbieten. > und dann mit mktime() umrechnest?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.