Я получаю 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