Скажем, у меня есть структура time_t и tm. Я не могу использовать Boost, но MFC. Как я могу сделать его строкой, как показано ниже?
Mon Apr 23 17:48:14 2012
Использует sprintf единственный способ?
Скажем, у меня есть структура time_t и tm. Я не могу использовать Boost, но MFC. Как я могу сделать его строкой, как показано ниже?
Mon Apr 23 17:48:14 2012
Использует sprintf единственный способ?
Библиотека 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
в локали, который может делать то же самое. Если память служит, мне удалось заставить ее работать один раз, но после этого решили, что это не стоит того, и я не сделал этого с тех пор.
CTime obj1(time_tObj);
CString s = obj1.Format( "%a %b %d %H:%M:%S %Y" );
MFC имеет COleDateTime
, у которого есть contructor, который принимает time_t
(или __time64_t
) и имеет Format
.
ctime()
создает строки в этом формате. Он принимает указатель на time_t
.
Там также asctime()
, который принимает указатель на struct tm
и делает то же самое.
Если вам нужно беспокоиться о форматировании на разных локалях, не забудьте инициализировать 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