क्या कोई "मानक" तरीका है या सबसे अच्छा मैं इसे gregorian::date(1970,1,1)
से घटाकर सीधे गणना कर सकता हूं?मैं boost :: posix_time :: ptime से time_t को कैसे परिवर्तित करूं?
उत्तर
time_t
सेकंड में समय (आमतौर पर युग समय) रखने के लिए उपयोग किया जाने वाला प्रकार है। मुझे लगता है कि आप युग के समय के बाद हैं, यदि ऐसा है तो मैं वास्तव में आपके द्वारा पहले से ही घटाए गए एक तरफ से सीधे युग समय प्राप्त करने के बढ़ावा में किसी भी तरह से अवगत नहीं हूं। एक बार आपके पास time_duration
(घटाव का परिणाम) हो जाने पर, आप time_t
में अवधि और स्टोर पर total_seconds()
पर कॉल कर सकते हैं।
बीटीडब्ल्यू। यदि आप युग के समय के बाद हैं, तो आप gettimeofday()
का उपयोग कर सकते हैं और खुद को कुछ सिरदर्द बचा सकते हैं!
चूंकि @ icecrime की विधि दो बार परिवर्तित होती है (पीटा आंतरिक रूप से रैखिक प्रतिनिधित्व का उपयोग करती है), मैंने इसके बजाय प्रत्यक्ष गणना का उपयोग करने का निर्णय लिया है। संदेश यह है:
time_t to_time_t(boost::posix_time::ptime t)
{
using namespace boost::posix_time;
ptime epoch(boost::gregorian::date(1970,1,1));
time_duration::sec_type x = (t - epoch).total_seconds();
// ... check overflow here ...
return time_t(x);
}
संपादित करें: धन्यवाद मेरे ध्यान में लाने के लिए @jaaw। चूंकि 1.58 को बढ़ावा देने के बाद यह फ़ंक्शन date_time/posix_time/conversion.hpp
, std::time_t to_time_t(ptime pt)
में शामिल किया गया है।
इस तरह की करुणा है कि उन्होंने इसे लाइब्रेरी में प्रत्यक्ष फ़ंक्शन कॉल के रूप में नहीं जोड़ा है ... मुझे आश्चर्य है कि कारण क्या हैं थे ... – Nim
प्रत्येक कॉल कंप्यूटिंग बनाम पीटाई युग स्थिर बनाम बना सकता है। –
रूपांतरण में std :: time_t posix_time :: to_time_t (posix_time :: ptime pt) का उपयोग करें। एचपीपी – jaaw
यहां @ ybungalobill की विधि का एक बदलाव है जो आपको पिछले 2038 में मिलेगा, बस मामले में। :)
int64_t rax::ToPosix64(const boost::posix_time::ptime& pt)
{
using namespace boost::posix_time;
static ptime epoch(boost::gregorian::date(1970, 1, 1));
time_duration diff(pt - epoch);
return (diff.ticks()/diff.ticks_per_second());
}
time_t कई प्रणालियों पर पहले से 64 बिट है। – ybungalobill
हां, लेकिन जब आप एक क्रॉस-प्लेटफ़ॉर्म ऐप लिख रहे हैं, तो आपको 32-बिट का भी समर्थन करना होगा। – kgriffs
@ybungalobill: समस्या इतनी अधिक नहीं है 'time_t' लेकिन 'time_duration :: sec_type' जो 32-बिट (कम से कम मेरी मशीन पर) है। –
इन 2 लाइनों को यह करना चाहिए।
tm td_tm = to_tm(pt);
time_t tt = mktime(&td_tm);
इस बात से सावधान रहना और ऊपर के आइसक्रीम के समाधान पॉज़िक्स एमकेटाइम के इनपुट अनुबंध है। mktime एक संरचना लेता है "स्थानीय समय के रूप में व्यक्त किया जाता है, कैलेंडर समय प्रतिनिधित्व के लिए" और इसे आपके लिए परिवर्तित करता है। हालांकि, tm संरचना को भरते समय p_time को आपके लिए कोई भी TZ रूपांतरण नहीं करता है। तो यदि आप यूटीसी 1 जनवरी, 1 9 70 मध्यरात्रि के बाद से # सेकंड के रूप में एक पूर्ण युग के समय की तलाश में हैं और आपकी मशीन का स्थानीय टीजेड जीएमटी नहीं है, तो यह कॉल आपको वह प्राप्त करने वाला नहीं है जो आप चाहते हैं। एक स्पष्ट रूप से निर्मित युग को घटाना और दूसरा अंतर लेना स्पष्ट, स्पष्ट और tz-safe है। – timmyl
- 1. एक बढ़ावा :: posix_time :: ptime
- 2. यूनिक्स टाइमस्टैम्प को बढ़ावा देने के लिए :: posix_time :: ptime
- 3. मैं एक आईएसओ 8601 स्ट्रिंग को सी ++ में time_t में कैसे परिवर्तित करूं?
- 4. boost :: date_time, g ++ - 4.7.0, संकलन त्रुटि
- 5. एक fractional epoch timestamp (double) को std :: chrono :: time_point में कैसे परिवर्तित करें?
- 6. int64_t को time_duration
- 7. ग्रेगोरियन तिथि को बढ़ावा दे सकता है और पॉजिक्स समय को बढ़ावा दे सकता है ठीक से अनियमित गणना?
- 8. time_t से घंटे निकालने के लिए कैसे?
- 9. सामान्य रूप से बढ़ावा :: संस्करण <T> से परिवर्तित टाइप करने के लिए
- 10. मैं संग्रहीत misencoded डेटा कैसे परिवर्तित करूं?
- 11. मैं int कैसे परिवर्तित करूं? int
- 12. मैं .NET डेटटाइम से आयरनपीथन डेटाटाइम में कैसे परिवर्तित करूं?
- 13. मैं जावा में int से Long में कैसे परिवर्तित करूं?
- 14. मैं स्ट्रिंगस्ट्रीम से सी ++ में स्ट्रिंग में कैसे परिवर्तित करूं?
- 15. मैं विरासत एएसपी अनुप्रयोगों को ASP.NET में कैसे परिवर्तित करूं?
- 16. मैं UIImage को NSData या CFDataRef में कैसे परिवर्तित करूं?
- 17. मैं लाटेक्स को सादे-पाठ (ASCII) में कैसे परिवर्तित करूं?
- 18. मैं पर्ल में वाईएएमएल को एक्सएमएल में कैसे परिवर्तित करूं?
- 19. मैं java.sql.Date ऑब्जेक्ट को ग्रेगोरियन कैलेंडर में कैसे परिवर्तित करूं?
- 20. मैं भाषण को पाठ में कैसे परिवर्तित करूं?
- 21. ओकैमल - मैं int को स्ट्रिंग में कैसे परिवर्तित करूं?
- 22. मैं ऐरे [नोड] को नोडसेक में कैसे परिवर्तित करूं?
- 23. मैं हेक्स स्ट्रिंग को हस्ताक्षरित पूर्णांक में कैसे परिवर्तित करूं?
- 24. मैं nchar को स्ट्रिंग में सी # में कैसे परिवर्तित करूं?
- 25. मैं सकारात्मक संख्या को नकारात्मक में कैसे परिवर्तित करूं?
- 26. मैं एक शब्दकोश को एक लुकअप में कैसे परिवर्तित करूं?
- 27. मैं एलएफ को सीआरएलएफ में कैसे परिवर्तित करूं?
- 28. मैं एक यूआईसीओलर को हेक्साडेसिमल स्ट्रिंग में कैसे परिवर्तित करूं?
- 29. मैं गणित वाक्यविन्यास को लेटेक्स में कैसे परिवर्तित करूं?
- 30. मैं स्ट्रिंग को क्लास विधि में कैसे परिवर्तित करूं?
बस एक विचार; मैं ग्रेगोरियन कैलेंडर में स्पष्ट समय के बजाय बूस्ट :: posix_time :: from_time_t (0) का उपयोग कर रहा हूं, एक संदर्भ-बिंदु प्राप्त करने के लिए जो स्वचालित रूप से संकलित सिस्टम के युग में समायोजित हो जाएगा। – Rawler
@ राउलर, यह संभवतः बेहतर है - मुझे पता चला है कि वास्तविक युग स्पष्ट रूप से 'ग्रेगोरियन :: दिनांक (1 9 70,1,1)' के प्रतिनिधित्व से पहले 2000ns है। –
@BrianCain आप कुख्यात युग टाइमस्टैम्प से पहले 2000ns के साथ कहाँ आए थे? जहां तक मुझे याद है और पढ़ा है, मैंने हमेशा सुना है कि युग 1 9 70-01-01 00: 00: 00.0 यूटीसी है। –