#c #boost
#c #повышение
Вопрос:
Кто-нибудь знает, как получить простой формат даты из boost текущего времени в локальную систему?
boost::posix_time::ptime now = boost::posix_time::second_clock::universal_time();
boost::posix_time::time_facet *facet = new boost::posix_time::time_facet("%d-%m-%Y %H:%M:%S");
Я видел примеры, в которых говорится об использовании cout.imbue, но мне просто нужна простая строка.
Ответ №1:
вы можете попробовать этот код:
void FormatDateTime(
std::string constamp; format,
boost::posix_time::ptime constamp; date_time,
std::stringamp; result)
{
boost::posix_time::time_facet * facet =
new boost::posix_time::time_facet(format.c_str());
std::ostringstream stream;
stream.imbue(std::locale(stream.getloc(), facet));
stream << date_time;
result = stream.str();
}
Установите формат "%d-%m-%Y %H:%M:%S"
или любой другой аспект, который вы хотите.
Для местного времени используйте boost::posix_time::second_clock::local_time()
в качестве второго аргумента ( date_time
) .
Комментарии:
1. Это не относится к локальному компьютеру… мне нужно повысить ::posix_time::ptime now = boost::posix_time::second_clock::local_time();
2. разве создание нового фасета и добавление его при каждом вызове этой функции не приводит к большим накладным расходам?
3. Что касается производительности, если вы всегда используете один и тот же формат, вы, вероятно, можете использовать один и тот же поток для каждой операции форматирования, и тогда вам не придется каждый раз заполнять фасет. Тем не менее, я никогда не пробовал. Также я не знаю, каковы накладные расходы на создание фасета и его наполнение.
Ответ №2:
Я знаю, что уже слишком поздно, но для таких поисковиков, как я:
#include <boost/format.hpp>
const boost::posix_time::ptime now = boost::posix_time::second_clock::local_time();
const boost::wformat f = boost::wformat(L"d.d.%s d:d")
% now.date().year_month_day().dayas_number()
% now.date().year_month_day().month.as_number()
% now.date().year_month_day().year
% now.time_of_day().hours()
% now.time_of_day().minutes();
const std::wstring result = f.str(); // "21.06.2013 14:38"
Комментарии:
1. это должно быть day.as_number(). невозможно редактировать из-за ограничения в 6 символов.
2. Я протестировал код, и год не всегда отформатирован правильно. Иногда год содержит запятую (2,017.01.11-16:18:01), иногда нет (2017.01.11-16:18:01), протестировано на Mac OS. Этот std::to_wstring(now.date().year_month_day().year) помог.