Tôi thấy điều này trên thúc đẩy cam kết danh sách gửi thư: http://lists.boost.org/boost-commit/2009/04/15209.php
Sau đây là các chức năng có liên quan:
template < class Clock, class Duration>
struct convert_to<posix_time::ptime, chrono::time_point<Clock, Duration> > {
inline static posix_time::ptime apply(const chrono::time_point<Clock, Duration>& from)
{
typedef chrono::time_point<Clock, Duration> time_point_t;
typedef chrono::nanoseconds duration_t;
typedef duration_t::rep rep_t;
rep_t d = chrono::duration_cast<duration_t>(from.time_since_epoch()).count();
rep_t sec = d/1000000000;
rep_t nsec = d%1000000000;
return boost::posix_time::from_time_t(0)+
boost::posix_time::seconds(static_cast<long>(sec))+
#ifdef BOOST_DATE_TIME_HAS_NANOSECONDS
boost::posix_time::nanoseconds(nsec);
#else
boost::posix_time::microseconds((nsec+500)/1000);
#endif
}
};
template < class Clock, class Duration>
struct convert_to<chrono::time_point<Clock, Duration>, posix_time::ptime> {
inline static chrono::time_point<Clock, Duration> apply(const posix_time::ptime& from)
{
boost::posix_time::time_duration const time_since_epoch=from-boost::posix_time::from_time_t(0);
chrono::time_point<Clock, Duration> t=chrono::system_clock::from_time_t(time_since_epoch.total_seconds());
long nsec=time_since_epoch.fractional_seconds()*(1000000000/time_since_epoch.ticks_per_second());
return t+chrono::nanoseconds(nsec);
}
};
Tôi không chắc chắn khi họ sẽ trở thành một phần của một thông cáo tăng. Họ dường như không có trong thân cây tăng cường ngay bây giờ ...
Tìm tốt. Các hàm này xuất hiện để giả định rằng kỷ nguyên của Clock giống như thời gian của ptime: New Years, 1970. Nếu giả định đó là đúng, các hàm này hoạt động. Nếu không, các hàm này là lỗi thời gian chạy im lặng. –
Có thể thực hiện đúng các chức năng này ngay cả khi các kỷ nguyên khác nhau? – HighCommander4
Tôi tin rằng bạn có thể đến rất gần. Trước tiên tôi sẽ tạo một chrono tùy chỉnh :: đồng hồ (không cần phải là chrono không gian tên) có một kỷ nguyên của năm mới, năm 1970. Chuyển đổi giữa thời gian và Đồng hồ mới của bạn như được mô tả ở trên. Và sau đó bạn có thể khoảng chuyển đổi giữa hai đồng hồ chrono của bạn bằng cách nhận được ngay bây giờ() từ mỗi người trong số họ (ngay sau khi khác). Trừ time_since_epoch() của mỗi time_point để có được một khoảng thời gian là sự khác biệt giữa các epochs của hai đồng hồ chrono của bạn. Bạn cộng/trừ sự khác biệt đó để chuyển đổi giữa hai thời gian chrono. –