A way to turn boost::posix_time::ptime into an __int64

后端 未结 4 1348
旧巷少年郎
旧巷少年郎 2021-01-04 01:34

Does anyone know if there is a good way to turn a boost::posix_time::ptime into an __int64 value. (I have compiled the microsecond version, not th

相关标签:
4条回答
  • 2021-01-04 01:57

    This is easy to do using the C++0x chrono classes, which are based on a simplified version of Boost's time/date library, but looking at the Boost docs I don't see anything particularly obvious. In fact the only method of doing this I can see is to call to_tm to convert it to a standard C struct tm and then multiply the fields together. This is kind of nasty, but should work (though you'll want to be careful about leap seconds and suchlike).

    0 讨论(0)
  • 2021-01-04 02:02
    #include <boost/date_time/posix_time/posix_time.hpp>
    
    // ...
    
    uint64_t secondsSinceEpoch(const boost::posix_time::ptime& time) {
        namespace bpt = boost::posix_time;
        const bpt::ptime epoch = bpt::from_time_t(0);
        bpt::time_duration duration = time - epoch;
        return duration.total_seconds();
    }
    
    // ...
    
    namespace bpt = boost::posix_time;
    const bpt::ptime now = bpt::second_clock::local_time();
    uint64_t seconds = secondsSinceEpoch(now);
    std::cout << "seconds: " << seconds << std::endl;
    
    0 讨论(0)
  • 2021-01-04 02:18

    Converting a ptime to an integer is rather meaningless, since ptime is an abstraction of the actual time. An integer based time is a representation of that time as a count from an epoch. What you (probably) want to do is generate a time_duration from your time to the epoch you are interested in, then use the time_duration::ticks() to get the 64-bit integer. You may have to scale your result to your desired precision:

    ptime myEpoch(date(1970,Jan,1)); // Or whatever your epocj is.
    time_duration myTimeFromEpoch = myTime - myEpoch;
    boost::int64_t myTimeAsInt = myTimeFromEpoch.ticks();
    
    0 讨论(0)
  • 2021-01-04 02:21

    from the docs: http://www.boost.org/doc/libs/1_40_0/doc/html/date_time/posix_time.html

    boost::int64_t ticks() Return the raw count of the duration type (will give unpredictable results if calling time_duration is a special_value). time_duration td(0,0,0, 1000); td.ticks() // --> 1000

    0 讨论(0)
提交回复
热议问题