Я пытаюсь напечатать boost::posix_time::ptime в формате "ГГГГ-ММ-ДД чч:мм:сс.fff", где MM — это двухзначный месяц, а fff — трехзначный. миллисекунды. Пример: 2011-07-14 22:38:40.123.
Я использую Boost 1.33.1.
Я пытался вызвать API "ptime::to_simple_string()", но это не соответствует моей потребности: этот метод печатает ptime в формате "ГГГГ-МММ-ДД чч:мм:сс". .ffffff», где «МММ» — это название месяца из 3 символов, например «Ян», а «ffffff» — это 6-значная микросекунда. Это НЕ то, чего я хочу.
Затем я попытался использовать функцию time_facet:
ptime my_time(second_clock::local_time());
time_facet<ptime, char> * my_time_facet = new time_facet<ptime, char>();
std::cout.imbue(std::locale(std::locale::classic(), my_time_facet));
std::cout << my_time;
Но я получил вывод типа «2011-07-14 22:38:40.123000». Я тоже НЕ этого хочу.
Похоже, что ptime по умолчанию использует микросекунды в качестве временного разрешения. Но мне просто нужно разрешение в миллисекундах. После некоторого изучения я думаю, что может быть два метода решения этой проблемы:
1). Каким-то образом я могу изменить разрешение времени ptime, чтобы использовать миллисекунды. Я нашел несколько классов перечисления и шаблонов, связанных с временным разрешением, но я не знаю, как их использовать.
2). Каким-то образом я могу изменить формат фасета времени, чтобы распечатать только миллисекунды. Но в официальной документации, похоже, говорится, что "%F" и "%f" используют разрешение в микросекундах.
Я предпочитаю первое решение, но мне нужна помощь! Как я могу получить строку ptime в желаемом формате?
PS:
1). Хотя я пытался найти аналогичный вопрос на этом сайте, но не нашел. Если вы знаете это, пожалуйста, скажите мне.
2). Документация Boost 1.33.1 Date Time (http://www.boost.org/doc/libs/1_33_1/doc/html/date_time.html) — единственная ссылка, которую я читал.
Обновление от 15.07.2011:
После некоторых дополнительных исследований мой вывод таков:
1). Можно изменить разрешение времени на миллисекунды, поэтому использование «%f» в time_facet будет печатать только миллисекунды вместо микросекунд по умолчанию. Однако вам, похоже, нужно определить целый набор собственных классов, включая your_time_res_traits, your_time_duration, your_time_system_config, your_time_system и your_time. Это определенно слишком сложно для моей проблемы.
2). Таким образом, я бы воспользовался предложением Марка (см. Ниже) просто удалить последние 3 символа после преобразования ptime с микросекундным разрешением в строку.