Как изменить разрешение C ++ boost posix_time :: ptime на миллисекунды?

Я пытаюсь напечатать boost :: posix_time :: ptime в формате «ГГГГ-ММ-ДД чч: мм: ss.fff», где ММ равно 2 -значный месяц и fff 3-значная миллисекунда . Пример: 2011- 07 -14 22:38:40. 123 .

Я использую Boost 1.33.1 .

Я попытался вызвать API «ptime :: to_simple_string ()», но это не соответствует моей потребности: этот метод печатает ptime в формате «ГГГГ-МММ-ДД чч: мм: ss.ffffff», где «MMM» - это трехзначное название месяца, например «Янв», а «ffffff» - шестизначная микросекунда. Это НЕ то, что я хочу.

Затем я попытался использовать вещь 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) - единственная справочная информация, которую я читал.


Обновление от 07 / 15/2011:

После некоторого дальнейшего изучения мой вывод таков:

1). Можно изменить временное разрешение на миллисекунды, поэтому использование «% f» в time_facet будет выводить только миллисекунды вместо микросекунд по умолчанию. Однако вам кажется, что вам нужно определить целый набор ваших собственных классов, включая your_time_res_traits, your_time_duration, your_time_system_config, your_time_system и your_time. Это определенно слишком сложно для моей задачи.

2). Поэтому я бы воспользовался предложением Марка (см. Ниже) просто вырезать последние 3 символа после преобразования ptime с микросекундным разрешением в строку.

6
задан zengr 4 May 2012 в 21:58
поделиться