【问题标题】:how to get boost::posix_time::ptime from formatted string如何从格式化字符串中获取 boost::posix_time::ptime
【发布时间】:2012-05-07 14:53:23
【问题描述】:

我有一个像“2012-03-28T08:00:00”这样的格式化字符串。 我想获取年、月(字符串格式)、日期、小时、分钟、秒和日(字符串格式)。 任何人都可以建议我在 boost 中做到这一点的最简单方法。

谢谢

【问题讨论】:

  • 您的字符串是否始终采用您在问题中询问的 ISO 格式,或者您是否需要它来接受任何格式的字符串?

标签: c++ boost


【解决方案1】:

如果现有的 from_string() 方法不适合您的需要,那么您可以使用时间输入方面,它允许您自定义解析字符串的格式。

在您的情况下,您可以使用 ISO 扩展格式字符串,因此您可以使用以下代码来解析您的字符串:

    boost::posix_time::time_input_facet *tif = new boost::posix_time::time_input_facet;
    tif->set_iso_extended_format();
    std::istringstream iss("2012-03-28T08:00:00");
    iss.imbue(std::locale(std::locale::classic(), tif));
    iss >> abs_time;
    std::cout << abs_time << std::endl;

【讨论】:

  • 不错,但“新”很难看。可以像这样构建 facet 来绕过它:“boost::posix_time::time_input_facet tif(1)”。论点“1”意味着没有所有权和生命周期的有趣业务......
【解决方案2】:

不使用分面;

ptime dateTime = boost::date_time::parse_delimited_time&lt;ptime&gt;(string, 'T');

from*_string 这两个函数对转换的格式有限制。

  • 不接受“T”:time_from_string(s)
  • 不接受'-':from_iso_string(s)

在 boost 中往返 ISO 8601 日期/时间;

std::string date = to_iso_extended_string(dateTime);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 2011-05-26
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多