4

我正在寻找boost::posix_time::time_input_facet可以让我解析毫秒的东西。它似乎与格式化微秒的不同,后者是"%f"

所以如果我有2011-12-11 08:29:53.123000,我希望有正确的格式来解析它,类似的东西"%Y-%m-%d %H:%M:%S"

4

1 回答 1

3

如果您有日期/时间字符串,则可以将其转换为 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

更新2

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?

于 2011-08-08T09:41:46.020 回答