आप केवल इस जानकारी को system_clock::time_point
से निकाल सकते हैं। यह एकमात्र सिस्टम-आपूर्ति घड़ी है जिसका नागरिक कैलेंडर के साथ संबंध है।
system_clock::time_point now = system_clock::now();
फिर आप के साथ एक time_t
को यह परिवर्तित कर सकते हैं: यहाँ कैसे इस घड़ी का उपयोग कर मौजूदा time_point पाने के लिए है
time_t tt = system_clock::to_time_t(now);
सी पुस्तकालय का उपयोग करके आप तो एक एक tm
को time_t
में बदल सकते हैं, लेकिन आप का चयन करना होगा कि क्या आप उस रूपांतरण यूटीसी समय क्षेत्र में क्या करना चाहते हैं, या आप स्थानीय समय क्षेत्र:
tm utc_tm = *gmtime(&tt);
tm local_tm = *localtime(&tt);
तो आप ग बाहर टीएम के घटकों एक प्रिंट, उदाहरण के लिए:
std::cout << local_tm.tm_year + 1900 << '\n';
std::cout << local_tm.tm_mon + 1 << '\n';
std::cout << local_tm.tm_mday << '\n';
इसके अतिरिक्त
आप चाहते हैं, तो आप इस गैर गारंटी जानकारी का लाभ ले सकते:
system_clock
मैं का हर कार्यान्वयन मुझे पता है कि unix time पर आधारित है। अर्थात। नए साल 1 9 70 यूटीसी के बाद सेकंड की संख्या, लीप सेकंड की उपेक्षा। और इस गिनती की सटीकता आमतौर पर सेकंड की तुलना में बेहतर होती है। यहाँ एक पूरा कार्यक्रम है जो सभी के लिए इस जानकारी का अर्क है:
#include <chrono>
#include <ctime>
#include <iostream>
int
main()
{
using namespace std;
using namespace std::chrono;
typedef duration<int, ratio_multiply<hours::period, ratio<24> >::type> days;
system_clock::time_point now = system_clock::now();
system_clock::duration tp = now.time_since_epoch();
days d = duration_cast<days>(tp);
tp -= d;
hours h = duration_cast<hours>(tp);
tp -= h;
minutes m = duration_cast<minutes>(tp);
tp -= m;
seconds s = duration_cast<seconds>(tp);
tp -= s;
std::cout << d.count() << "d " << h.count() << ':'
<< m.count() << ':' << s.count();
std::cout << " " << tp.count() << "["
<< system_clock::duration::period::num << '/'
<< system_clock::duration::period::den << "]\n";
time_t tt = system_clock::to_time_t(now);
tm utc_tm = *gmtime(&tt);
tm local_tm = *localtime(&tt);
std::cout << utc_tm.tm_year + 1900 << '-';
std::cout << utc_tm.tm_mon + 1 << '-';
std::cout << utc_tm.tm_mday << ' ';
std::cout << utc_tm.tm_hour << ':';
std::cout << utc_tm.tm_min << ':';
std::cout << utc_tm.tm_sec << '\n';
}
यह एक कस्टम बनाने के लिए उपयोगी है duration
दिनों मॉडल करने के लिए:
typedef duration<int, ratio_multiply<hours::period, ratio<24> >::type> days;
अब आप समय अवधि के बाद, के रूप में प्राप्त कर सकते हैं एक सटीक ठीक के रूप में यह प्रबंधन कर सकते हैं, के साथ:
system_clock::duration tp = now.time_since_epoch();
तब दिनों के लिए यह छोटा कर देते, और कहा कि बंद घटाना।
फिर इसे घंटों तक छोटा करें, और इसे घटाएं।
तब तक जारी रखें जब तक आप सेकंड को घटा नहीं लेते।
आपको जो छोड़ा गया है वह system_clock::duration
की इकाइयों के साथ एक सेकंड का अंश है। तो दिखाए गए अनुसार उस रन टाइम मान और उस मान की संकलन समय इकाइयों को प्रिंट करें।
मेरे लिए इस कार्यक्रम के बाहर प्रिंट:
15806d 20:31:14 598155[1/1000000]
2013-4-11 20:31:14
मेरे उत्पादन इंगित करता है system_clock::duration
परिशुद्धता माइक्रोसेकंड है।यदि आप चाहें, उस के साथ मिलीसेकेंड तक छोटा कर दिया जा सकता है:
milliseconds ms = duration_cast<milliseconds>(tp);
अद्यतन
This header-only C++11/14 library काम समाहित ऊपर, नीचे करने के लिए ग्राहक के काम को कम करने: मेरे लिए
#include "date.h"
#include <iostream>
int
main()
{
// Reduce verbosity but let you know what is in what namespace
namespace C = std::chrono;
namespace D = date;
namespace S = std;
auto tp = C::system_clock::now(); // tp is a C::system_clock::time_point
{
// Need to reach into namespace date for this streaming operator
using namespace date;
S::cout << tp << '\n';
}
auto dp = D::floor<D::days>(tp); // dp is a sys_days, which is a
// type alias for a C::time_point
auto ymd = D::year_month_day{dp};
auto time = D::make_time(C::duration_cast<C::milliseconds>(tp-dp));
S::cout << "year = " << ymd.year() << '\n';
S::cout << "month = " << ymd.month() << '\n';
S::cout << "day = " << ymd.day() << '\n';
S::cout << "hour = " << time.hours().count() << "h\n";
S::cout << "minute = " << time.minutes().count() << "min\n";
S::cout << "second = " << time.seconds().count() << "s\n";
S::cout << "millisecond = " << time.subseconds().count() << "ms\n";
}
कौन सा सिर्फ उत्पादन:
2015-07-10 20:10:36.023017
year = 2015
month = Jul
day = 10
hour = 20h
minute = 10min
second = 36s
millisecond = 23ms
[हो के संभावित डुप्लिकेट wd :: chrono :: time \ _point को कैलेंडर डेटाटाइम स्ट्रिंग को fractional सेकंड के साथ कनवर्ट करने के लिए?] (http://stackoverflow.com/questions/12835577/how-to-convert-stdchronotime-point-to-calendar-datetime- स्ट्रिंग-साथ-अंश) – Ali