[C] Frage zum Umwandeln in UTC

Buba235

Erfahrenes Mitglied
Hallo Leute!

Ich habe ein Problem beim umwandeln in die UTC Zeit. Ich verstehe nicht warum es bei mir schief geht. Vielleicht bin ich auch nur zu blind. Ich versuche es wie folgt:

Code:
static const long long SECS_BETWEEN_EPOCHS  = 11644473600ll;
static const long long SECS_TO_100NS        = 10000000ll;   /* 10^7 */
static const long long MSECS_TO_100NS       = 10000ll;      /* 10^4 */

time_t tod, retTime;
struct tm *tp;
long long intime;
DateTime tmpDateTime;
    
retTime = time(&tod);
tp = gmtime(&retTime);

intime = tp;
intime += SECS_BETWEEN_EPOCHS;
intime *= SECS_TO_100NS;
intime += tp->tm_sec * MSECS_TO_100NS;

tmpDateTime.dwHighDateTime = intime >> 32;
tmpDateTime.dwLowDateTime  = intime & 0xffffffff;

return tmpDateTime;

Auf diese Art kommt immer dieser Müll raus: "1970-04-03T06:53:36.014Z". Aber die Logik müsste doch richtig sein! Könnt ihr mir bitte helfen?
 
Hallo!
Okay ich hab Mist gebaut. Klar ist das auch falsch was ich da mache. Ich habe es geändert, aber die Uhrzeit passt leider noch nicht.
Der Code:

Code:
static const long long SECS_BETWEEN_EPOCHS  = 11644473600ll;
static const long long SECS_TO_100NS        = 10000000ll;   /* 10^7 */
static const long long MSECS_TO_100NS       = 10000ll;      /* 10^4 */

long long intime;
DateTime tmpDateTime;
struct timeval tvp;
    
gettimeofday(&tvp, 0);

intime = tvp.tv_sec;
intime += SECS_BETWEEN_EPOCHS;
intime *= SECS_TO_100NS;
intime += tvp.tv_usec * MSECS_TO_100NS;

tmpDateTime.dwHighDateTime = intime >> 32;
tmpDateTime.dwLowDateTime  = intime & 0xffffffff;
    
return tmpDateTime;

Jetzt kommt leider die falsche Uhrzeit raus. Datum passt aber die Zeit ist so ca. 10 Minuten in der Zukunft!
 
Hast du schonmal versucht statt long long unsigned long long int zu verwenden (oder kurz uint64_t) ? Ich kann mir zwar nicht unbedingt vorstellen das es daran liegt, aber wer weiss das schon. ;)
 
Ich ehrlich gesagt auch, war auch nur eine Idee beim schnellen überfliegen. ^^

Wenn es also daran nicht liegt, würde ich darauf tippen, dass eine deiner eingeführten Konstanten nicht stimmt. Vorallem wenn die Zeit etwa 10 min in der Zukunft liegt deutet das ja darauf hin, dass du etwa
600000 ms zuviel addierst, oder?
 
Zuletzt bearbeitet:
Hallo!

Okay ich hab den Fehler gefunden. Er lag in der Konstanten "MSECS_TO_100NS". Die musste auf 10 geändert werden, da "tvp.tv_usec" Mikrosekunden sind und nicht Millisekunden.
 
Zurück