युग का मानना एक ज्ञात clock
प्रकार जैसा है, आप double
प्रतिनिधित्व के साथ अवधि का उपयोग कर सकते हैं और उस घड़ी द्वारा उपयोग की जाने वाली अवधि में कनवर्ट कर सकते हैं।
// change period to appropriate units - I'm assuming seconds
typedef std::chrono::duration<double, std::ratio<1>> d_seconds;
d_seconds since_epoch_full(324324.342);
auto since_epoch = std::chrono::duration_cast<clock::duration>(since_epoch_full);
clock::time_point point(since_epoch);
यह, कि घड़ी को शामिल किसी भी गणना के लिए ठीक होना चाहिए, क्योंकि आप घड़ी के रूप में ही परिशुद्धता का उपयोग कर रहे हैं, लेकिन यह रूपांतरण में परिशुद्धता के कुछ खो सकते हैं। यदि आप इसे खोना नहीं चाहते हैं तो आपको time_point
विशेषज्ञता का उपयोग करना होगा जो double
-आधारित अवधि प्रकार का उपयोग करता है। और फिर अपनी गणनाओं में इसका उपयोग करें (बेशक, फ्लोटिंग-पॉइंट गणित की सभी चेतावनियों के साथ)।
typedef std::chrono::time_point<clock, d_seconds> d_time_point;
हालांकि, यह उसी घड़ी से जुड़े किसी भी गणना को जटिल करेगा, क्योंकि इसे रूपांतरण की आवश्यकता होगी। इस आसान बनाने के लिए, आप अपने खुद घड़ी आवरण कि रूपांतरण करता है का निर्माण और उपयोग करें कि कर सकते हैं:
template <typename Clock>
struct my_clock_with_doubles {
typedef double rep;
typedef std::ratio<1> period;
typedef std::chrono::duration<rep, period> duration;
typedef std::chrono::time_point<my_clock_with_doubles<Clock>> time_point;
static const bool is_steady = Clock::is_steady;
static time_point now() noexcept {
return time_point(std::chrono::duration_cast<duration>(
Clock::now().time_since_epoch()
));
}
static time_t to_time_t(const time_point& t) noexcept {
return Clock::to_time_t(typename Clock::time_point(
std::chrono::duration_cast<typename Clock::duration>(
t.time_since_epoch()
)
));
}
static time_point from_time_t(time_t t) noexcept {
return time_point(std::chrono::duration_cast<duration>(
Clock::from_time_t(t).time_since_epoch()
));
}
};
स्रोत
2012-02-10 00:31:47
तुम पर पढ़ा है [N2661] (http://www.open-std.org/jtc1/sc22/ wg21/docs/कागजात/2008/n2661.htm)? – ildjarn
"(...) fractional epoch timestamp, जिसे 'डबल' के रूप में दर्शाया गया है" क्या इकाइयां? क्या आप युग को जानते हैं? –
@ आर। मार्टिन्होफर्नैंड्स: यह 1/1/1970 के बाद मानक यूनिक्स युग है। – mavam