Как поместить в пременную значение дата время?
Получаю дату время
#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]