Boost logo

Boost Users :

From: Rakesh Kumar (rakesh_usenet_at_[hidden])
Date: 2004-12-21 19:26:38


Thanks Jeff for the detailed example.

Eagerly looking forward to the 1.33 release.

--- Jeff Garland <jeff_at_[hidden]>
wrote:

> On Sun, 19 Dec 2004 22:22:46 -0800 (PST), Rakesh
> Kumar wrote
> > Hi,
> > I was going through the API to parse a date-time
> > field. I came across the boost library regarding
> the
> > same.
> >
> > #include
> "boost/date_time/posix_time/posix_time.hpp"
> >
> > using namespace boost::posix_time;
> > #include <iostream>
> > #include <cstdlib>
> >
> > using std::cout;
> >
> > int main() {
> > std::string ts("2002-01-20
> 23:59:59.000");
> > ptime t(time_from_string(ts));
> >
> > cout << to_simple_string(t);
> > return EXIT_SUCCESS;
> > }
> >
> > This example compiled fine and gave me the right
> > results. But suppose if I have another date
> > representation as follows.
> >
> > 06 Dec 2004 10:40:58.000
> >
> > If I enter the same string and try to parse from
> it,
> > the method time_from_string aborts. I was
> wondering if
> > there is any way I can tell time_from_string the
> > format and try to parse from it.
>
> Well, there isn't currently a way to tell
> from_string to do this directly.
> However, you can use functions from the library to
> write your own parsing
> routine. For example, the following handles the
> format you provided:
>
> boost::posix_time::ptime
> my_parse_time(const std::string& s)
> {
> using namespace boost::gregorian;
> using namespace boost::posix_time;
> std::string date_part(s.substr(0,11));
> date d = from_uk_string(date_part); //expects day
> month year order
> std::string time_part(s.substr(12,12));
> time_duration td =
> duration_from_string(time_part);
> return ptime(d, td);
> }
>
> int
> main()
> {
> using namespace boost::posix_time;
> using namespace boost::gregorian;
> std::string ts("06 Dec 2004 23:59:59.000");
> try {
> ptime t = my_parse_time(ts);
> std::cout << to_simple_string(t) << std::endl;
> }
> catch(std::exception& e) {} // invalid time string
> return 0;
>
> }
>
> In the 1.33 release you will be able to pass a
> format to a facet class to
> adjust how you want things parsed. It will look
> like this:
>
> std::stringstream ss("06 Dec 2004 23:59:59.000");
> time_facet* tf = new time_facet("%d %M %Y
> %H:%M:%s");
> ss.imbue(tf);
> ptime t; //not-a-date-time
> ss >> t;
>
> Jeff
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
>
http://lists.boost.org/mailman/listinfo.cgi/boost-users
>

                
__________________________________
Do you Yahoo!?
Yahoo! Mail - now with 250MB free storage. Learn more.
http://info.mail.yahoo.com/mail_250


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net