Boost::datetime Datums und Zeit Format ändern



  • Hallo,

    hab ein problem mit dem ändern des Formates eines Datums via Boost.
    Datum liegt folgendermaßen vor 100825 123521 (YYMMDD HHMMSS)
    und soll für MySQL ins richtige Format gebracht werden 2010-08-25 12:35:21;

    Habe das hier versucht aber blicke da noch nicht ganz durch, und finde auch kein passendes tutorial via google dafür.

    std::string date = "100825";
        std::string time = "123521";
        std::stringstream ss;
        boost::local_time::local_time_input_facet* lif1(new boost::local_time::local_time_input_facet("%y%m%d%H%M%S"));
        ss.imbue(std::locale(std::locale::classic(), lif1));
        ss.str(date+time);
        boost::local_time::local_time_facet* lf(new boost::local_time::local_time_facet("%Y-%m-%d %H:%M:%S"));
        ss.imbue(std::locale(std::locale::classic(), lf));
        std::cout << ss.str();
    

    Bin für jeden Tipp dankbar.


  • Administrator

    Da fehlt eher C++ Wissen:

    ss.str(date+time);
    

    Hier machst du nichst anderes, als den Inhalt des Stringstreams auf diesen Wert zu setzen. Wenn du danach ss.str() aufrufst, bekommst du genau den gleichen Wert zurück. Deine Facets werden somit gar nie aktiv.

    Am besten schaust du dir eigentlich mal die DateTime Beispiele und Tutorials an:
    http://www.boost.org/doc/libs/1_45_0/doc/html/date_time/date_time_io.html#date_time.io_tutorial
    http://www.boost.org/doc/libs/1_45_0/doc/html/date_time/examples.html#date_time.examples.localization

    Achte dabei darauf, dass über die Operatoren >> und << gelesen und geschrieben wird. Diese Operatoren führen formatierte Ein- und Ausgabe durch, verwenden dabei somit die vorhandenen Facets.

    Grüssli


Log in to reply