我正在寻找boost::posix_time::time_input_facet
可以让我解析毫秒的东西。它似乎与格式化微秒的不同,后者是"%f"
所以如果我有2011-12-11 08:29:53.123000
,我希望有正确的格式来解析它,类似的东西"%Y-%m-%d %H:%M:%S"
。
我正在寻找boost::posix_time::time_input_facet
可以让我解析毫秒的东西。它似乎与格式化微秒的不同,后者是"%f"
所以如果我有2011-12-11 08:29:53.123000
,我希望有正确的格式来解析它,类似的东西"%Y-%m-%d %H:%M:%S"
。
如果您有日期/时间字符串,则可以将其转换为 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?