2013-02-21 71 views
6

मैं एक साधारण टाइमस्टैम्पिंग सिस्टम लिखने की कोशिश कर रहा हूं जो वर्तमान समय से युग सेकंड और अंशकालिक सेकंड प्रदान करता है। मैं बढ़ावा पुस्तकालय का उपयोग कर रहा है और कुछ इस तरह है:ग्रेगोरियन तिथि को बढ़ावा दे सकता है और पॉजिक्स समय को बढ़ावा दे सकता है ठीक से अनियमित गणना?

const boost::posix_time::ptime epoch(boost::gregorian::date(1970, 1, 1)); 
boost::posix_time::ptime time() { 
    boost::posix_time::ptime now = boost::posix_time::microsec_clock::universal_time(); 
    return now; 
} 
boost::posix_time::time_duration dur = (time() - epoch); 

और फिर युग मूल्यों को निकालने के लिए निम्न तत्वों का उपयोग: विशेष रूप से

dur.total_seconds(); 
dur.fractional_seconds(); 

, यह एक उचित यूनिक्स समय वापस आ जाएगी? यदि नहीं, तो इसे ठीक करने के तरीके के बारे में कोई सुझाव? धन्यवाद।

उत्तर

5

हां, यह काम करना चाहिए, लेकिन, निश्चित होने के लिए, वहाँ हमेशा प्रयोगात्मक सबूत है:

#include <iostream> 
#include <time.h> 
#include <boost/date_time.hpp> 
namespace bpt = boost::posix_time; 
namespace bg = boost::gregorian; 
int main() 
{ 
    bpt::time_duration dur = bpt::microsec_clock::universal_time() 
          - bpt::ptime(bg::date(1970, 1, 1)); 
    timespec ts; 
    clock_gettime(CLOCK_REALTIME, &ts); 
    std::cout << std::setfill('0') 
       << " boost: " << dur.total_seconds() << '.' << std::setw(6) 
          << dur.fractional_seconds() << '\n' 
       << " ctime: " << time(NULL) << '\n' 
       << " posix: " << ts.tv_sec << '.' << std::setw(9) 
          << ts.tv_nsec << '\n'; 
} 

मैं

लिनक्स/जीसीसी

boost: 1361502964.664746 
ctime: 1361502964 
posix: 1361502964.664818326 

सूर्य/सूर्य स्टूडियो

मिल
boost: 1361503762.775609 
ctime: 1361503762 
posix: 1361503762.775661600 

एईक्स/एक्सएल सी

boost: 1361503891.342930 
ctime: 1361503891 
posix: 1361503891.342946000 

और यहां तक ​​कि विंडोज़/दृश्य स्टूडियो

boost: 1361504377.084231 
ctime: 1361504377 

ऐसा लगता है कि वे सब प्रयोग चल रहा है पर date(1970,1,1)

+0

महान बिंदु के बाद से पारित कर दिया है कि कितने सेकंड पर विभिन्न पर परिणामों के लिए धन्यवाद सहमत हैं, और सिस्टम, जो बहुत मदद करता है। मुझे यह उल्लेख करना चाहिए था कि मैं लिनक्स/जीसीसी और विंडोज़/बनाम 2010 पर निर्माण कर रहा था। – brendon