Разбор микросекунд с бустом - PullRequest
4 голосов
/ 05 августа 2011

Я ищу boost::posix_time::time_input_facet, который позволит мне разобрать миллисекунды. Похоже, он не совпадает с форматом микросекунд, который равен "%f"

Так что, если у меня есть 2011-12-11 08:29:53.123000, я бы хотел иметь правильное форматирование для его анализа, что-то вроде этого "%Y-%m-%d %H:%M:%S".

1 Ответ

3 голосов
/ 08 августа 2011

Если у вас есть строка даты / времени, вы можете преобразовать ее в объект ptime следующим образом:

using boost::posix_time;
ptime t = time_from_string(datetimeString);

Имея это, вы можете легко получить time_duration, который содержит доли секунды.

time_duration td = t.time_of_day();
long fs = td.fractional_seconds();

Вы также можете получить общее количество миллисекунд или микросекунд, например:

long ms = td.total_milliseconds();
long us = td.total_microseconds();

Более подробную информацию о том, что можно сделать в документации .

ОБНОВЛЕНИЕ

Если формат ввода может быть другим, поэтому вы хотите использовать time_input_facet, вы можете проверить time_facet.hpp для соответствующего формата.Вот что вы, вероятно, хотите выбрать:

  static const char_type fractional_seconds_format[3];               // f                                                                                                                                 
  static const char_type fractional_seconds_or_none_format[3];       // F                                                                                                                                 
  static const char_type seconds_with_fractional_seconds_format[3];  // s

UPDATE2

In time_facet.hpp (Boost 1.45) При синтаксическом анализе я вижу следующее:

case 'f':
{
    // check for decimal, check special_values if missing                                                                                                                                       
    if(*sitr == '.') {
        ++sitr;
        parse_frac_type(sitr, stream_end, frac);
        ...

Не понимаю, почему для этого потребовалось бы что-нибудь, кроме точки между секундами и долями секунды.Может быть, вы используете другую версию Boost?

...