frage zu time.h

Gast #4826043
Lesenswert?

Guten Tag,
ich experimentiere gerade mit der time.h.
Habe versucht die 1481559030 was dem 12.12.2016 um 16uhr10 und 
30Sekunden entspricht mit der Funktion gmtime um zu Wandel.
dabei kommt mir bei   tm_wday  3 raus obwohl heute ja Montag ist und bei 
tm_year  146 obwohl mir das Jahr 2016 haben;-)


Was mache ich falsch?

Lg
Moderator Persönliche Seite #4826078
Lesenswert?

Keine Romane schreiben, sondern Source und Plattform zeigen.
1
$ cat gmtime.c
2
#include <stdio.h>
3
#include <time.h>
4

5
int main ()
6
{
7
    time_t now = 1481559030;
8
    struct tm  * tmp;
9

10
    tmp = gmtime (&now);
11

12
    printf ("year:   %4d\n", tmp->tm_year + 1900);
13
    printf ("month:  %02d\n", tmp->tm_mon + 1);
14
    printf ("day:    %02d\n", tmp->tm_mday);
15
    printf ("wday:   %02d\n", tmp->tm_wday);
16
    printf ("hour:   %02d\n", tmp->tm_hour);
17
    printf ("minute: %02d\n", tmp->tm_min);
18
    printf ("second: %02d\n", tmp->tm_sec);
19

20
    return 0;
21
}
22
$ cc gmtime.c -o gmtime && ./gmtime
23
year:   2016
24
month:  12
25
day:    12
26
wday:   01
27
hour:   16
28
minute: 10
29
second: 30

Also bei mir kommt glatt der 12.12.2016 raus. Wochentag 1 = Montag und 
Uhrzeit stimmt auch.
#4826149
Lesenswert?

Fielmann schrieb im Beitrag #4826139:
> Plenken und dann noch nach den I2C-Routinen fragen? Was soll das?

Was ist Plenken.

Ein von mir selber gemachter Fehler war, das ich die Jahreszahl 1900
nicht addiert habe. Darauf wollte ich aufmerksam machen.

Gut die Variable heißt nicht unixtime sondern timeunix.

Die Frage nach den I2C Routinen habe ich
gelöscht, weil ich gesehen habe das das Ergebnis im Debugfenster steht.
Ansonsten sind (mögliche) Übertragungsfehler immer verwirrend.

Was regt du dich eigentlich so auf ?
Gast #4826157
Lesenswert?

Frank M. schrieb:
> printf ("year:   %4d\n", tmp->tm_year + 1900);
>     printf ("month:  %02d\n", tmp->tm_mon + 1);
>     printf ("day:    %02d\n", tmp->tm_mday);
>     printf ("wday:   %02d\n", tmp->tm_wday);
>     printf ("hour:   %02d\n", tmp->tm_hour);
>     printf ("minute: %02d\n", tmp->tm_min);
>     printf ("second: %02d\n", tmp->tm_sec);

In welche Variable schreibt printf? Wie kann ich auf die ausgabe von 
printf mit dem Debugger zugreifen?


A. K. schrieb im Beitrag #4826150:
> Woher kommt das gmtime?

Das das kommt aus der time.h

Lg
Gast #4826158
Lesenswert?

R. M. schrieb:
> Fielmann schrieb im Beitrag #4826139:
>> Plenken und dann noch nach den I2C-Routinen fragen? Was soll das?
>
> Was ist Plenken.
>
> Ein von mir selber gemachter Fehler war, das ich die Jahreszahl 1900
> nicht addiert habe. Darauf wollte ich aufmerksam machen.
>
> Gut die Variable heißt nicht unixtime sondern timeunix.
>
> Die Frage nach den I2C Routinen habe ich
> gelöscht, weil ich gesehen habe das das Ergebnis im Debugfenster steht.
> Ansonsten sind (mögliche) Übertragungsfehler immer verwirrend.
>
> Was regt du dich eigentlich so auf ?

Die I2C-Routinen haben nichts mit dem Problem zu tun.
#4826162
Lesenswert?

"Though not specified in the standard, it is often expected that time_t 
is a signed integer representing an offset in seconds from Midnight Jan 
1 1970... i.e. 'Unix time'. This implementation uses an unsigned 32 bit 
integer offset from Midnight Jan 1 2000. The use of this 'epoch' helps 
to simplify the conversion functions, while the 32 bit value allows time 
to be properly represented until Tue Feb 7 06:28:15 2136 UTC. The macros 
UNIX_OFFSET and NTP_OFFSET are defined to assist in converting to and 
from Unix and NTP time stamps."
Gast #4826170
Lesenswert?

A. K. schrieb:
> Doku lesen: "time_t represents seconds elapsed from Midnight, Jan 1 2000
> UTC (the Y2K 'epoch'). Its range allows this implementation to represent
> time up to Tue Feb 7 06:28:15 2136 UTC."
> http://www.nongnu.org/avr-libc/user-manual/group__avr__time.html
>
> Bisschen fies, das einfach so umzudefinieren.

Was heißt das jetzt? 2000+146 ergibt auch nicht 2016?
hat jemand die richtige time.h? oder wie Löse ich das?

Danke Lg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren