मैं इन क्षेत्रों मैन्युअल रूप से (पूर्णांक में पढ़ रहे हैं और सेकंड के लिए डबल) पार्स होगा, तो days_from_civil का उपयोग में वर्ष/माह/दिन कन्वर्ट करने के लिए एक chrono::system_clock::time_point
:
std::chrono::system_clock::time_point t(days(days_from_civil(y, m, d)));
जहां days
है:
using days = std::chrono::duration<int, std::ratio<86400>>;
फिर आप उस घंटों, मिनटों और सेकंड में जोड़ सकते हैं। आंशिक सेकंड संभाल करने के लिए आप एक मामूली नृत्य करने की आवश्यकता होगी:
double s;
your_stream >> s; // 32.121
using namespace std::chrono;
duration<double> dsecs(s);
seconds sec = duration_cast<seconds>(dsecs);
milliseconds ms = duration_cast<milliseconds>(dsecs - sec);
t += sec + ms;
यदि आप चाहें, तो अपने मिलीसेकेंड रूपांतरण के लिए round
from here का उपयोग करें:
milliseconds ms = round<milliseconds>(dsecs - sec);
duration_cast
शून्य की ओर काटना है। अन्य गोलाकार मोड हैं: फर्श, गोल, छत, at this link।
इसे आसानी से पुन: उपयोग के लिए एक साफ समारोह में लपेटें। :-)
उपरोक्त कोड सभी यूटीसी मानते हैं। यदि आपकी दिनांक/समय जिसे आप पार्सिंग कर रहे हैं उसे यूटीसी से ऑफसेट करने के लिए जाना जाता है, तो आप उस ऑफसेट को जोड़/घटा सकते हैं। system_clock
ट्रैक Unix time के सभी ज्ञात कार्यान्वयन, जो यूटीसी समय क्षेत्र में 1 9 70-01-01 के बाद से सेकंड है।
अद्यतन
इस जवाब मैं एक more general library कि ओपी उस समय की मांग कर लग रहा था विकसित किया है लेखन के बाद से।
#include "date.h"
#include <iostream>
#include <sstream>
int
main()
{
std::istringstream in{"30/03/09 16:31:32.121\n"
"30/03/09 16:31:32.1214"};
std::chrono::system_clock::time_point tp;
in >> date::parse("%d/%m/%y %T", tp);
using namespace date;
std::cout << tp << '\n';
in >> date::parse(" %d/%m/%y %T", tp);
std::cout << tp << '\n';
}
यह आउटपुट:: यह सीधे एक std::chrono::system_clock::time_point
इस तरह में उप दूसरा precisions की एक विस्तृत विविधता पार्स कर सकते हैं
2009-03-30 16:31:32.121000
2009-03-30 16:31:32.121400
इस पुस्तकालय के रूप में मैं मूल रूप से वर्णित एक ही तकनीक और उपकरण का उपयोग करता है, लेकिन पैक किया जाता है ऊपर और एक हेडर लाइब्रेरी के रूप में जाने के लिए तैयार है।
['std :: get_time'] (http://en.cppreference.com/w/cpp/io/manip/get_time) सी ++ 11 है लेकिन दर्पण 'स्ट्रिप्टाइम' विनिर्देशन है। क्या आपको मिलीसेकंड स्टोर करने की ज़रूरत है, या क्या आपको इसे प्रदर्शित करने की आवश्यकता है? –
मेरा लक्ष्य इस तारीख के समय को क्रोनो टाइमपॉइंट में संग्रहीत करना है, इसलिए मुझे इसे पार्स और संग्रहीत करने की आवश्यकता है। – Nezquick
.1214 के साथ आप मिलीसेकंड नहीं मांग रहे हैं, लेकिन 1/10 मिलीसेकंड, या 100 माइक्रोसॉन्ड के लिए। –