Как поместить в пременную значение дата время?

Получаю дату время

#include <time.h>
#include <stdio.h>

int main(int argc , char *argv[])
{
struct timespec ts;

timespec_get(&ts, TIME_UTC);

char buff[100];

strftime(buff, sizeof buff, "%Y-%m-%d %H:%M:%S", gmtime(&ts.tv_sec));

printf("[%s.%09ld]\n", buff, ts.tv_nsec);

return 0;
}

но не могу сообразить как поместить в переменную полученный результат что бы не дописывать в

printf("[%s.%09ld]\n", buff, ts.tv_nsec);

а использовать для конечного результата одну переменную пример: printf(end_result)?


Ответы (2 шт):

Автор решения: Harry

Ну, раз автора вопроса устраивает...

char buff[100];
strftime(buff, sizeof buff, "[%Y-%m-%d %H:%M:%S", gmtime(&ts.tv_sec));
sprintf(buff+strlen(buff),".%09ld]\n", buff, ts.tv_nsec);

Можно (нужно!) использовать более безопасные версии типа snprintf или sprintf_s.

→ Ссылка
Автор решения: Stanislav Volodarskiy

Можно сделать печать совсем без промежуточного буфера:

#include <stdio.h>
#include <time.h>

int main() {
    struct timespec ts;

    timespec_get(&ts, TIME_UTC);
    const struct tm *t = gmtime(&ts.tv_sec);

    printf(
        "[%04d-%02d-%02d %02d:%02d:%02d.%09ld]\n",
        t->tm_year + 1900,
        t->tm_mon + 1,
        t->tm_mday,
        t->tm_hour,
        t->tm_min,
        t->tm_sec,
        ts.tv_nsec
    );
}
$ gcc timestamp.c

$ ./a.out
[2024-03-25 17:42:22.535546099]

$ ./a.out
[2024-03-25 17:42:23.895268541]
→ Ссылка