C: gettimeofday () выдает одно и то же значение при каждом запуске - PullRequest
1 голос
/ 20 ноября 2011

Я пытаюсь распечатать время в ISO-8601 с точностью до секунды. YYYY-MM-DDThh: мм: сс.с

Вот мой код:

#include <sys/time.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void milli_time(char* dest, struct timeval* t)
{
    struct tm* timeInfo;
    strftime(dest, 22, "%Y-%m-%dT%t", localtime(&t->tv_sec));
    printf("%s\n", dest);
    fflush(stdout);
    char deciTime[3];
    sprintf(deciTime, ".%lu", ((t->tv_usec)/100000ul));

    strcat(dest, deciTime);
}

int main()
{
    struct timeval* theTime;
    char timeString[32];
    gettimeofday(theTime, NULL);
    printf("%lu.%lu\n", theTime->tv_sec, theTime->tv_usec);
    milli_time(timeString, theTime);
    printf("%s\n", timeString);
    fflush(stdout);
}

И вывод при каждом запуске:

134520616.3077826840
1974-04-06T17:50:16
1974-04-06T17:50:16.30778

Другая вещь, которую я заметил, это то, что tv_usec больше миллиона.

1 Ответ

5 голосов
/ 20 ноября 2011

Измените struct timeval* theTime на struct timeval theTime и обновите соответствующие ссылки на него:

gettimeofday(&theTime, NULL);
// etc

Таким образом, вы выделяете пространство для структуры, а не просто указатель на структуру. Когда я пытаюсь запустить его на своем компьютере, ваш код не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...