Domanda

ho un puntatore ad una stringa, (char *) come input. Gli sguardi di data / ora come questo:
Sab 10 Apr 2010 19:30:00
Mi interessa solo la data, non il tempo. Ho creato un "input_facet" con il formato che voglio:

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

Ma io non sono sicuro di cosa fare con esso. In definitiva mi piacerebbe creare un oggetto data dalla stringa. Sono abbastanza sicuro che io sono sulla strada giusta con quella sfaccettatura di ingresso e il formato, ma non ho idea di come usarlo.

Grazie.

È stato utile?

Soluzione

Non si può respingere sempre la parte di tempo di una stringa a causa delle differenze di fuso orario una data può cambiare.

  • Per analizzare data / ora è possibile utilizzare time_input_facet<>
  • per estrarre una parte data da esso è possibile utilizzare il metodo .date()

Esempio:

// $ 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' ;
}

eseguirlo:

$ g++ *.cc -lboost_date_time && ./a.out 
date: 2010-Apr-10
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top