Как сделать понятную человеку строку из структуры tm? - PullRequest
1 голос
/ 15 октября 2010

Я получаю struct tm и хочу преобразовать ее в строку с таким конкретным выводом:

дд-мм-гггг чч: мм

где все число, кроме месяца (мм), например:

14 октября 2010 г. 10: 35

Это мой текущий код:

  struct stat sb;
  if (lstat(path, &sb) == 0) {
    struct tm *pmytm = gmtime(&sb.st_mtime);
    sprintf(array[index]->mtime, "%d-%d-%d %d:%d", pmytm->tm_mday, pmytm->tm_mon, 1900 + pmytm->tm_year, pmytm->tm_hour, pmytm->tm_min);

Проблема в том, что я не знаю, как я мог бы эффективно передать этот pmytm-> tm_mon в месяц. Вы рекомендуете создавать массив месяцев и просто индексировать этот массив (заменив% d на% s в моем sprintf), или есть лучшее решение, пожалуйста?

Кроме того, у меня проблема с часами и минутами. Если оно меньше 10 (2 цифры), будет отображаться только одно число, например: 10: 8, а не 10:08. Как я могу это исправить?

Большое спасибо за помощь,

РЕДАКТИРОВАТЬ: Что я имею в виду в качестве решения (это элегантно?):

  static char *months[] = { "", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };

  struct stat sb;
  if (lstat(path, &sb) == 0) {
    struct tm *pmytm = gmtime(&sb.st_mtime);
    sprintf(array[index]->mtime, "%02d-%s-%d %02d:%02d", pmytm->tm_mday, months[pmytm->tm_mon], 1900 + pmytm->tm_year, pmytm->tm_hour, pmytm->tm_min);

Jary

Ответы [ 2 ]

7 голосов
/ 15 октября 2010

Используйте функцию strftime от времени

0 голосов
/ 15 октября 2010

Если вы хотите больше контролировать форматирование времени, попробуйте использовать strfime:

struct stat sb;
if (lstat("/etc/passwd", &sb) == 0) {
    char    time_buf[256];
    (void) strftime(time_buf, sizeof (time_buf),
        "%m-%d-%Y %H-%M (mon=%b)", localtime(&sb.st_mtime));
    (void) printf("Time: %s\n", time_buf);
}

Вы можете использовать gmtime () вместо localtime (), если не хотите исправлять часовой пояс.

Выходные данные:

Time: 08-30-2010 17-13 (mon=Aug)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...