Имеет ли put_time спецификатор преобразования, который выводит однозначные дни месяца без предшествующего символа

put_time предоставляет 2 спецификатора преобразования для выходного дня месяца:

  1. %d: «День месяца, дополненный нулями (01-31)»
  2. %e: «День месяца, дополненный пробелами (1-31)»

Обратите внимание, что ни один из этих спецификаторов преобразования не позволит мне вывести не дополненный день месяца. Так, например, учитывая tm tmb, если я хочу вывести день месяца как:

8 февраля 18 года

Я мог бы сделать: cout << put_time(&tmb, "%b%e '%y")

Но это на 10го это выведет:

10 февраля 18 года

Таким образом, я должен сделать джанк: cout << put_time(&tmb, "%b ") << tmb.tm_mday << put_time(&tmb, " '%y")

Есть ли спецификатор преобразования, который я могу использовать, чтобы получить все это за один раз? put_time вызов?

0

Решение

Чтобы ответить на этот вопрос, я вытащил отсюда полный список спецификаторов преобразования: http://en.cppreference.com/w/cpp/io/manip/put_time и связал их в простая программа:

tm tmb = { 5, 6, 7, 8, 9, 10 };

mktime(&tmb);

for(const auto i : { "%%", "%n", "%t", "%Y", "%EY", "%y", "%Oy", "%Ey", "%C", "%EC", "%G", "%g", "%b", "%h", "%B", "%m", "%Om", "%U", "%OU", "%W", "%OW", "%V", "%OV", "%j", "%d", "%Od", "%e", "%Oe", "%a", "%A", "%w", "%Ow", "%u", "%Ou", "%H", "%OH", "%I", "%OI", "%M", "%OM", "%S", "%OS", "%c", "%Ec", "%x", "%Ex", "%X", "%EX", "%D", "%F", "%r", "%R", "%T", "%p", "%z", "%Z" } ) {
cout << i << "\t|\t\"" << put_time(&tmb, i) << "\"\n";
}

Результат этого выглядит следующим образом:

%%  |   "%"%n  |   ""%t  |   "   "%Y  |   "1910"%EY |   "1910"%y  |   "10"%Oy |   "10"%Ey |   "10"%C  |   "19"%EC |   "19"%G  |   "1910"%g  |   "10"%b  |   "Oct"%h  |   "Oct"%B  |   "October"%m  |   "10"%Om |   "10"%U  |   "40"%OU |   "40"%W  |   "40"%OW |   "40"%V  |   "40"%OV |   "40"%j  |   "281"%d  |   "08"%Od |   "08"%e  |   " 8"%Oe |   " 8"%a  |   "Sat"%A  |   "Saturday"%w  |   "6"%Ow |   "6"%u  |   "6"%Ou |   "6"%H  |   "07"%OH |   "07"%I  |   "07"%OI |   "07"%M  |   "06"%OM |   "06"%S  |   "05"%OS |   "05"%c  |   "Sat Oct  8 07:06:05 1910"%Ec |   "Sat Oct  8 07:06:05 1910"%x  |   "10/08/10"%Ex |   "10/08/10"%X  |   "07:06:05"%EX |   "07:06:05"%D  |   "10/08/10"%F  |   "1910-10-08"%r  |   "07:06:05 AM"%R  |   "07:06"%T  |   "07:06:05"%p  |   "AM"%z  |   "+0000"%Z  |   "UTC"

Поле, о котором идет речь, является tmb.tm_mday который заполнен 8, Таким образом, то, что вам нужно здесь, это значение в таблице «8». Быстрый поиск покажет, что его нет. Таким образом, ответ на ваш вопрос: Не существует спецификатора преобразования, который выводит однозначные дни месяца без предшествующего символа. Вам придется использовать обходной путь, аналогичный тому, который вы предложили в этом вопросе.

1

Другие решения

Других решений пока нет …