увеличьте время простой читаемой человеком даты до настоящего времени

#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) помог.