C - Печать только выбранной информации из mktime?

Я как бы застрял здесь с функцией mktime, и я был бы признателен за любую помощь, которую я могу получить.

Итак, что я делаю, это заставляю пользователя вводить год, месяц и день, а затем запускать структуру tm, чтобы вычислить все следующим образом:

struct tm time;

time_t t;

time.tm_year = year - 1900;
time.tm_mon = month - 1;
time.tm_mday = day;
time.tm_hour = 0;
time.tm_min = 0;
time.tm_sec = 0;
time.tm_isdst = -1;

Затем я запускаю функцию mktime и устанавливаю ее равной t:

t = mktime (& время);

А затем я запускаю функцию печати следующим образом:

printf ("% s", ctime (& t));

Однако с помощью этого метода я получаю, например, следующее:

Сб 23 авг 00:00:00 2013

Но я бы хотел, чтобы окончательный формат времени выглядел так:

Пн 2013 02 11

Как бы я это сделал? Я считаю, что мой подход к функции ctime неверен.

Может стоит использовать функцию strftime?

Обратите внимание, что мне не нужно печатать текущее время.

Спасибо, хорошего вам :)


person Daeto    schedule 18.10.2015    source источник


Ответы (1)


Вы можете использовать strftime для этого. Вот пример:

char str[50];
struct tm *tm_info = localtime(&t);
strftime(str, 50, "%a %G %m %d", tm_info);

Затем вы можете использовать printf("%s\n", str) для вывода отформатированной даты.

Спасибо Xis88 за формат.

person Linus    schedule 18.10.2015
comment
Привет и спасибо за ответ. Я думал, что так будет. но как бы я это реализовал, если моя структура объявлена ​​так: struct tm time; вместо struct tm * time? - person Daeto; 18.10.2015
comment
Что ж, вы можете просто использовать оператор ссылки, чтобы указать на имеющуюся у вас структуру: strftime(str, 50, "%a %G %m %d", &time);, но я не уверен, что вы пытаетесь сделать. Почему бы просто не объявить его как указатель и не использовать локальное время? - person Linus; 18.10.2015
comment
О, я понял это, большое спасибо :) Я использовал & time, чтобы указать на структуру, и теперь она работает правильно. :) - person Daeto; 18.10.2015