> I note that boost::posix_time supports on certain platforms
> the generation of a ptime from a timeval (using gettimeofday()).
> 
> I have a time class in my own project which can be cast from/to
> timeval, so I can use it in conjunction with calls to 'select()',
> which expects a timeval pointer.
> 
> I'd like to replace my code by boost::date_time, but conversion
> from boost::date_time to timeval doesn't seem to be supported.

You are right, but this would make a nice addition.

For your purpose you should probably consider using the
library with microsecond resolution enabled.  Basically if
you don't add BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG this
is what you will get (more details in my other response
to your follow on email).  Then you won't have to worry
about rounding of nano-second resolution into microseconds.

So then you need a function like:

timeval to_timeval(const boost::posix_time::ptime& t);

As I recall (going from memory without checking!) the first part 
of the timeval is a time_t count of seconds since 1/1/1970 00:00:00.
So to get this we can do the following:

     using boost::posix_time;
     ptime timet_start(date(1970,1,1));
     time_duration diff = t - timet_start;
     timeval tv;
     //drop off the fractional seconds...
     tv.tv_sec = diff.ticks()/time_duration::rep_type::res_adjust();
     //The following only works with microsecond resolution!
     tv.tv_usec = diff.fractional_seconds();
     return tv;

This is rough and totally untested, but should get you going.  
As an example, ptime can represent dates prior to 1/1/1970, 
so the results will be wrong if you use such dates.  But if
you are only using time values read from the clock than you
will be safe.  Also 
     tv.tv_usec = diff.fractional_seconds();
will need to be rounded or adjusted by the resolution if you aren't
using microsecond resolutions.

HTH,

Jeff
     
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to