代码之家  ›  专栏  ›  技术社区  ›  Chris H

基本boost日期时间输入格式问题

  •  0
  • Chris H  · 技术社区  · 14 年前

    我有一个指向字符串(char*)的指针作为输入。日期/时间如下:
    2010年4月10日星期六19:30:00
    我只对日期感兴趣,对时间不感兴趣。 我用我想要的格式创建了一个“input_facet”:

    boost::date_time::date_input_facet inFmt("%a %d %b %Y");
    

    但我不知道该怎么办。最后,我想从字符串创建一个日期对象。我很确定我的输入方面和格式是正确的,但是我不知道如何使用它。

    谢谢。

    1 回复  |  直到 11 年前
        1
  •  3
  •   jfs    14 年前

    不能总是由于日期可以更改的时区差异而忽略字符串的时间部分。

    • 分析可以使用的日期/时间 time_input_facet<>
    • 要从中提取日期部分,可以使用 .date() 方法

    例子:

    // $ g++ *.cc -lboost_date_time && ./a.out 
    #include <iostream>
    #include <locale>
    #include <sstream>
    
    #include <boost/date_time/local_time/local_time.hpp>
    #include <boost/date_time/posix_time/posix_time.hpp>
    
    int main() {
      using namespace std;
      using boost::local_time::local_time_input_facet;
      using boost::posix_time::ptime;
    
      stringstream ss;
      ss <<                                     "Sat, 10 Apr 2010 19:30:00";
      ss.imbue(locale(locale::classic(),       
                      new local_time_input_facet("%a, %d %b %Y " "%H:%M:%S")));
      ptime t;
      ss.exceptions(ios::failbit);
      ss >> t;
      cout << "date: " << t.date() << '\n' ;
    }
    

    运行它:

    $ g++ *.cc -lboost_date_time && ./a.out 
    date: 2010-Apr-10