【问题标题】:Parsing microseconds with boost用 boost 解析微秒
【发布时间】:2011-08-05 13:35:01
【问题描述】:

我正在寻找可以让我解析毫秒的boost::posix_time::time_input_facet。它似乎与格式化微秒的 "%f"

不一样

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

【问题讨论】:

  • 毫秒秒应该是
  • 目标是什么?只是从上述格式的字符串或其他格式的字符串中获取毫秒/微秒?
  • 目的是获得 ms/us 信息,以便我可以根据时间戳对信息进行排序,然后更准确地显示出来。

标签: datetime boost milliseconds


【解决方案1】:

如果你有一个日期/时间字符串,你可以将它转换成一个 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();

有关可以在documentation 中完成的操作的更多信息。

更新

如果输入格式可能不同,因此您想使用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?

【讨论】:

  • 它确实有效,但如果我使用不同的日期格式,我不确定它是否仍然有效。我正在寻找毫秒或微秒的标签以添加到%Y-%m-%d %H:%M:%S。我以为是%3N 但它不起作用
  • %Y-%m-%d %H:%M:%s 然后工作。这也有点奇怪,因为解析方面是%Y-%m-%d %H:%M:%S%f,但格式是%Y-%m-%d %H:%M:%S.%f(注意.%f 之前)
  • 您使用的是哪个版本的 boost?在 1.45 中,我目前看到输入方面正在检查 . (点)在解析小数秒之前。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多