Как форматировать дату и время в С++

Скажем, у меня есть структура time_t и tm. Я не могу использовать Boost, но MFC. Как я могу сделать его строкой, как показано ниже?

Mon Apr 23 17:48:14 2012

Использует sprintf единственный способ?

Ответ 1

Библиотека C включает strftime специально для форматирования дат/времени. Формат, о котором вы просите, похоже, соответствует следующему:

char buffer[256];

strftime(buffer, sizeof(buffer), "%a %b %d %H:%M:%S %Y", &your_tm);

Я полагаю, что std::put_time использует аналогичную строку формата, хотя это освобождает вас от необходимости явно обращаться с буфером. Если вы хотите записать вывод в поток, это довольно удобно, но для его ввода в строку это не очень помогает - вам нужно сделать что-то вроде:

std::stringstream buffer;

buffer << std::put_time(&your_tm, "%a %b %d %H:%M:%S %Y");

// now the result is in `buffer.str()`.

std::put_time является новым с С++ 11, но С++ 03 имеет фасет time_put в локали, который может делать то же самое. Если память служит, мне удалось заставить ее работать один раз, но после этого решили, что это не стоит того, и я не сделал этого с тех пор.

Ответ 2

Я бы попробовал std::put_time. См. Ссылку

Ответ 3

CTime obj1(time_tObj);

CString s = obj1.Format( "%a %b %d %H:%M:%S %Y" );

Ответ 4

MFC имеет COleDateTime, у которого есть contructor, который принимает time_t (или __time64_t) и имеет Format.

Ответ 5

ctime() создает строки в этом формате. Он принимает указатель на time_t.
Там также asctime(), который принимает указатель на struct tm и делает то же самое.

Ответ 6

Если вам нужно беспокоиться о форматировании на разных локалях, не забудьте инициализировать CRT с текущей локалью. Это также влияет на COleDateTime.

setlocale(LC_COLLATE,".OCP"); // sets the sort order

setlocale(LC_MONETARY, ".OCP"); // sets the currency formatting rules

setlocale(LC_NUMERIC, ".OCP"); // sets the formatting of numerals

setlocale(LC_TIME, ".OCP"); // defines the date/time formatting

Смотрите сообщение в блоге, которые связаны в статьях MSDN и других источниках. http://gilesey.wordpress.com/2012/12/30/initailizing-mfccrt-for-consumption-of-regional-settings-internationalizationc