这是答案的重点:
time_t to_time_t(boost::posix_time::ptime const& pt) //! assumes UTC
{
return (pt - boost::posix_time::from_time_t(0)).total_seconds();
}
当您使用它时,我会更简洁地编写日期计算:
int main()
{
using namespace boost::local_time;
auto now = local_sec_clock::local_time(time_zone_ptr()),
then = now + ymd_duration { 1, 3, -4 };
std::cout << now << ", " << to_time_t(now.utc_time()) << "\n";
std::cout << then << ", " << to_time_t(then.utc_time()) << "\n";
}
在 Coliru 上看到它,打印
2014-May-12 21:50:06 UTC, 1399931406
2015-Aug-08 21:50:06 UTC, 1439070606
Full Code
:
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/local_time/local_time.hpp>
#include <boost/date_time/local_time/local_time_io.hpp>
struct ymd_duration { int years, months, day; };
template <typename T>
T operator+(T const& pt, ymd_duration delta)
{
using namespace boost::gregorian;
return pt + years(delta.years) + months(delta.months) + days(delta.day);
}
time_t to_time_t(boost::posix_time::ptime const& pt) //! assumes UTC
{
return (pt - boost::posix_time::from_time_t(0)).total_seconds();
}
int main()
{
using namespace boost::local_time;
auto now = local_sec_clock::local_time(time_zone_ptr()),
then = now + ymd_duration { 1, 3, -4 };
std::cout << now << ", " << to_time_t(now.utc_time()) << "\n";
std::cout << then << ", " << to_time_t(then.utc_time()) << "\n";
}