C ++ में वर्तमान समय और दिनांक कैसे प्राप्त करें?


457

क्या C ++ में वर्तमान दिनांक और समय प्राप्त करने के लिए एक क्रॉस-प्लेटफ़ॉर्म तरीका है?


2
यदि ओकोनल अभी भी सक्रिय है, तो उसे स्वीकृत उत्तर को C ++ 11 दृष्टिकोण में बदलना चाहिए। इस सवाल को अभी भी बहुत सारे विचार मिलते हैं।
JSQuareD


3
@JSQuareD इस प्रश्न को देखने के बाद भी इस समय के बाद, मैं tmसंरचना का उपयोग करके सी दृष्टिकोण को बेहतर पाता हूं । क्या C ++ 11 दृष्टिकोण सिर्फ यूनिक्स टाइमस्टैम्प (समय के बाद से) नहीं देता है, हालांकि सवाल तारीख और समय प्राप्त करने के बारे में था?
औरदेरो

वाह, इस सवाल के 1,110,886 विचार हैं! लोग वास्तव में सी ++ से प्यार करते हैं!
प्रयोक्ता १

जवाबों:


595

C ++ 11 में आप उपयोग कर सकते हैं std::chrono::system_clock::now()

उदाहरण ( en.cppreference.com से कॉपी किया गया ):

#include <iostream>
#include <chrono>
#include <ctime>    

int main()
{
    auto start = std::chrono::system_clock::now();
    // Some computation here
    auto end = std::chrono::system_clock::now();

    std::chrono::duration<double> elapsed_seconds = end-start;
    std::time_t end_time = std::chrono::system_clock::to_time_t(end);

    std::cout << "finished computation at " << std::ctime(&end_time)
              << "elapsed time: " << elapsed_seconds.count() << "s\n";
}

इसे कुछ इस तरह प्रिंट करना चाहिए:

finished computation at Mon Oct  2 00:59:08 2017
elapsed time: 1.88232s

28
इसे अपग्रेड किया जाना चाहिए क्योंकि यह वर्तमान C ++ में सबसे पोर्टेबल और आसान तरीका है।
जोहान्स

4
@ जोहान्स, बस मेरा जोड़ा। इस दर पर, यह 15 अगस्त 2017 तक 16:31 UTC :-)
मार्टिन ब्रॉडहर्स्ट

62
यह जवाब प्राप्त मूल्य का उपयोग करने के उदाहरण के बिना बहुत कम उपयोग का है। उदाहरण के लिए, आप इसे कैसे प्रिंट कर सकते हैं, स्थानीय समय प्राप्त कर सकते हैं, अन्य तारीख / समय के साथ तुलना कर सकते हैं?
स्टैड

32
यह सबसे खराब उत्तर संभव है। यह अन्य c ++ 11 उत्तर को एक डुप्लिकेट बनाता है, और फिर भी यह केवल 'लिंक' होने के नाते कुछ भी नहीं बताता है।
v010dya

10
इस उत्तर से अधिक बिंदु तक पहुंचने का कोई तरीका नहीं है। ओपी पूछ रहा था "क्या C ++ में वर्तमान तिथि और समय प्राप्त करने के लिए एक क्रॉस-प्लेटफ़ॉर्म तरीका है?" यह सवाल आपको बिल्कुल यही देता है। आप कैसे एक पाने के लिए के बारे में संदेह में हैं, तो stringसे stream, या कैसे ठीक एक फ़ॉर्मेट करने के लिए time_point<>, आगे जाना है और एक और सवाल पूछने या बाद गूगल।
टार्क

483

C ++ सी के साथ अपनी तिथि / समय के कार्यों को साझा करता है। tm संरचना सी ++ प्रोग्रामर के लिए काम करने के लिए संभवतः सबसे आसान है - निम्नलिखित आज की तारीख:

#include <ctime>
#include <iostream>

int main() {
    std::time_t t = std::time(0);   // get time now
    std::tm* now = std::localtime(&t);
    std::cout << (now->tm_year + 1900) << '-' 
         << (now->tm_mon + 1) << '-'
         <<  now->tm_mday
         << "\n";
}

26
ctime()यदि आप डेट स्ट्रिंग चाहते हैं तो इस उत्तर के साथ प्रयोग करें ।
राल्फ्थिनेजजा

3
इसके उदाहरण को हटाने के बारे में क्या struct tmयह सिर्फ उस पर कॉल हटाने के लिए संभव है?
पेट्र

4
@Petr आपको केवल नए के साथ आवंटित मेमोरी पर डिलीट को कॉल करने की आवश्यकता है।
इहानी

4
ठीक है, लेकिन फिर भी आपको स्थानीय समय से संकेत मिलता है () तो संरचना उदाहरण ढेर पर आवंटित किया जाता है या नहीं? जिसका मतलब है कि यह तब तक साफ नहीं होता जब तक आप ऐसा नहीं करते। मैंने उस पर कभी भी delete(c ++ कीवर्ड) का उपयोग नहीं किया, मुझे लगा कि इसे किसी तरह हटा दिया जाना चाहिए :) या आपके लिए कौन ऐसा करने जा रहा है?
पेट्र

9
@Petr आपको इसे निपटाए जाने की आवश्यकता नहीं है क्योंकि इसे वैधानिक रूप से आवंटित किया गया है, इस विषय के लिए यहां देखें stackoverflow.com/questions/8694365/-
ब्रैंडिन

180

वर्तमान तिथि / समय प्राप्त करने के लिए आप निम्नलिखित क्रॉस-प्लेटफ़ॉर्म कोड आज़मा सकते हैं:

#include <iostream>
#include <string>
#include <stdio.h>
#include <time.h>

// Get current date/time, format is YYYY-MM-DD.HH:mm:ss
const std::string currentDateTime() {
    time_t     now = time(0);
    struct tm  tstruct;
    char       buf[80];
    tstruct = *localtime(&now);
    // Visit http://en.cppreference.com/w/cpp/chrono/c/strftime
    // for more information about date/time format
    strftime(buf, sizeof(buf), "%Y-%m-%d.%X", &tstruct);

    return buf;
}

int main() {
    std::cout << "currentDateTime()=" << currentDateTime() << std::endl;
    getchar();  // wait for keyboard input
}

आउटपुट:

currentDateTime()=2012-05-06.21:47:59

दिनांक / समय प्रारूप के बारे में अधिक जानकारी के लिए कृपया यहाँ जाएँ


हैलो। मुझे फ़ंक्शन "currentDateTime ()" के अंदर इस "buf" आवंटन के साथ थोड़ी समस्या है। फ़ंक्शन वापस आने के बाद इसे कैसे जारी रखना चाहिए? धन्यवाद।
Léa Massiot

7
वापसी प्रकार "कॉन्स्ट स्टड :: स्ट्रिंग" है, इसलिए इसे मूल्य द्वारा वापस किया जाता है और फिर इसे जारी करने से पहले बफर की एक प्रति बनाई जाती है।
बैरेंक्वेरो

3
क्यों लौटा constमूल्य? वह उद्देश्यहीन है।
ऑर्बिट

क्रॉस-प्लेटफॉर्म समाधान के लिए प्लस 1!
जिगल

139

std C लाइब्रेरी प्रदान करते हैं time()। यह युग से सेकंड है और इसे तिथि और H:M:Sमानक सी फ़ंक्शन का उपयोग करके परिवर्तित किया जा सकता है। बूस्ट में एक समय / तिथि पुस्तकालय भी है जिसे आप जांच सकते हैं।

time_t  timev;
time(&timev);

24
नीचे दिए गए जवाब का बेहतर ढांचा है और बेहतर उदाहरण प्रदान करता है।
MDTech.us_MAN

2
इसके अलावा, उन्होंने C ++ नहीं C. के बारे में पूछा
jterm

2
@jterm इसकी ओके, सी और सी ++ एक ही टाइम लाइब्रेरी, इसके अलग-अलग आयात नामों की बात और इसे साझा करता है
जोसेफ फराह

31

C ++ मानक पुस्तकालय एक उचित दिनांक प्रकार प्रदान नहीं करता है। C ++, दिनांक और समय इनपुट और आउटपुट फ़ंक्शन के एक जोड़े के साथ C से दिनांक और समय के हेरफेर के लिए संरचना और कार्यों को विरासत में लेता है।

// Current date/time based on current system
time_t now = time(0);

// Convert now to tm struct for local timezone
tm* localtm = localtime(&now);
cout << "The local date and time is: " << asctime(localtm) << endl;

// Convert now to tm struct for UTC
tm* gmtm = gmtime(&now);
if (gmtm != NULL) {
cout << "The UTC date and time is: " << asctime(gmtm) << endl;
}
else {
cerr << "Failed to get the UTC date and time" << endl;
return EXIT_FAILURE;
}

25

एक पुराने प्रश्न का नया उत्तर:

प्रश्न किस समयक्षेत्र में निर्दिष्ट नहीं है। दो उचित संभावनाएं हैं:

  1. यूटीसी में।
  2. कंप्यूटर के स्थानीय समयक्षेत्र में।

1 के लिए, आप इस तिथि पुस्तकालय और निम्नलिखित कार्यक्रम का उपयोग कर सकते हैं :

#include "date.h"
#include <iostream>

int
main()
{
    using namespace date;
    using namespace std::chrono;
    std::cout << system_clock::now() << '\n';
}

जो मेरे लिए सिर्फ आउटपुट:

2015-08-18 22:08:18.944211

तिथि पुस्तकालय अनिवार्य रूप से सिर्फ एक स्ट्रीमिंग ऑपरेटर जोड़ता है std::chrono::system_clock::time_point। यह कई अन्य अच्छी कार्यक्षमता को भी जोड़ता है, लेकिन इस सरल कार्यक्रम में इसका उपयोग नहीं किया जाता है।

यदि आप 2 (स्थानीय समय) पसंद करते हैं, तो एक टाइमज़ोन लाइब्रेरी है जो डेट लाइब्रेरी के शीर्ष पर बनती है । ये दोनों लाइब्रेरी ओपन सोर्स और क्रॉस प्लेटफॉर्म हैं , मान लीजिए कि कंपाइलर C ++ 11 या C ++ 14 को सपोर्ट करता है।

#include "tz.h"
#include <iostream>

int
main()
{
    using namespace date;
    using namespace std::chrono;
    auto local = make_zoned(current_zone(), system_clock::now());
    std::cout << local << '\n';
}

जो मेरे लिए सिर्फ आउटपुट:

2015-08-18 18:08:18.944211 EDT

से परिणाम प्रकार make_zonedएक है date::zoned_timeजो एक date::time_zoneऔर एक की एक जोड़ी है std::chrono::system_clock::time_point। यह जोड़ी स्थानीय समय का प्रतिनिधित्व करती है, लेकिन UTC का प्रतिनिधित्व भी कर सकती है, यह इस बात पर निर्भर करता है कि आप इसे कैसे लिखते हैं।

उपरोक्त आउटपुट के साथ, आप देख सकते हैं कि मेरा कंप्यूटर इस समय -4h के यूटीसी ऑफसेट के साथ टाइमज़ोन में है, और ईडीटी का संक्षिप्त नाम है।

यदि कुछ अन्य समयक्षेत्र वांछित है, तो वह भी पूरा किया जा सकता है। उदाहरण के लिए सिडनी, ऑस्ट्रेलिया में वर्तमान समय को खोजने के लिए केवल चर के निर्माण को बदलें local:

auto local = make_zoned("Australia/Sydney", system_clock::now());

और आउटपुट में परिवर्तन होता है:

2015-08-19 08:08:18.944211 AEST

C ++ 20 के लिए अद्यतन

यह लाइब्रेरी अब काफी हद तक C ++ 20 के लिए अपनाई गई है। नेमस्पेस dateचला गया है और सब कुछ std::chronoअब नेमस्पेस में है। और के zoned_timeस्थान पर उपयोग करें make_time। हेडर ड्रॉप "date.h"और "tz.h"और बस का उपयोग <chrono>

जैसा कि मैंने यह लिखा है, कुछ प्लेटफार्मों पर आंशिक कार्यान्वयन अभी शुरू हो रहे हैं।


localtimeमेरे समयक्षेत्र में मुझे समय नहीं देना चाहिए ?
जोनाथन मी

हाँ, localtimeहोगा लगभग हमेशा आप समय दूसरा परिशुद्धता के लिए आपके स्थानीय समय क्षेत्र में दे। कभी-कभी यह थ्रेडस्फ़ैटी मुद्दों के कारण विफल हो जाएगा, और यह उप-परिशुद्धता के लिए कभी काम नहीं करेगा।
हावर्ड हिनान्ट

19

(साथी गोगलर्स के लिए)

Boost :: date_time भी है :

#include <boost/date_time/posix_time/posix_time.hpp>

boost::posix_time::ptime date_time = boost::posix_time::microsec_clock::universal_time();

16
auto time = std::time(nullptr);
std::cout << std::put_time(std::localtime(&time), "%F %T%z"); // ISO 8601 format.

वर्तमान समय का उपयोग करके std::time()या std::chrono::system_clock::now()(या अन्य प्रकार की घड़ी ) प्राप्त करें।

std::put_time()(C ++ 11) और strftime()(C) उन समयों को आउटपुट करने के लिए बहुत सारे स्वरूप प्रदान करते हैं।

#include <iomanip>
#include <iostream>

int main() {
    auto time = std::time(nullptr);
    std::cout
        // ISO 8601: %Y-%m-%d %H:%M:%S, e.g. 2017-07-31 00:42:00+0200.
        << std::put_time(std::gmtime(&time), "%F %T%z") << '\n'
        // %m/%d/%y, e.g. 07/31/17
        << std::put_time(std::gmtime(&time), "%D"); 
}

फॉर्मेटर्स का क्रम मायने रखता है:

std::cout << std::put_time(std::gmtime(&time), "%c %A %Z") << std::endl;
// Mon Jul 31 00:00:42 2017 Monday GMT
std::cout << std::put_time(std::gmtime(&time), "%Z %c %A") << std::endl;
// GMT Mon Jul 31 00:00:42 2017 Monday

के स्वरूप strftime()समान हैं:

char output[100];
if (std::strftime(output, sizeof(output), "%F", std::gmtime(&time))) {
    std::cout << output << '\n'; // %Y-%m-%d, e.g. 2017-07-31
}

अक्सर, कैपिटल फॉर्मेटर का अर्थ है "पूर्ण संस्करण" और लोअरकेस का अर्थ है संक्षिप्त नाम (जैसे Y: 2017, y: 17)।


लोकेल सेटिंग्स आउटपुट को बदल देती हैं:

#include <iomanip>
#include <iostream>
int main() {
    auto time = std::time(nullptr);
    std::cout << "undef: " << std::put_time(std::gmtime(&time), "%c") << '\n';
    std::cout.imbue(std::locale("en_US.utf8"));
    std::cout << "en_US: " << std::put_time(std::gmtime(&time), "%c") << '\n';
    std::cout.imbue(std::locale("en_GB.utf8"));
    std::cout << "en_GB: " << std::put_time(std::gmtime(&time), "%c") << '\n';
    std::cout.imbue(std::locale("de_DE.utf8"));
    std::cout << "de_DE: " << std::put_time(std::gmtime(&time), "%c") << '\n';
    std::cout.imbue(std::locale("ja_JP.utf8"));
    std::cout << "ja_JP: " << std::put_time(std::gmtime(&time), "%c") << '\n';
    std::cout.imbue(std::locale("ru_RU.utf8"));
    std::cout << "ru_RU: " << std::put_time(std::gmtime(&time), "%c");        
}

संभावित आउटपुट ( कोलीरू , कंपाइलर एक्सप्लोरर ):

undef: Tue Aug  1 08:29:30 2017
en_US: Tue 01 Aug 2017 08:29:30 AM GMT
en_GB: Tue 01 Aug 2017 08:29:30 GMT
de_DE: Di 01 Aug 2017 08:29:30 GMT
ja_JP: 2017年08月01日 08時29分30秒
ru_RU: Вт 01 авг 2017 08:29:30

मैंने std::gmtime()यूटीसी में रूपांतरण के लिए उपयोग किया है । std::localtime()स्थानीय समय में बदलने के लिए प्रदान किया जाता है।

Heed कि asctime()/ ctime()जिनका उल्लेख अन्य उत्तरों में किया गया था, अब पदावनत के रूप में चिह्नित हैं और strftime()उन्हें प्राथमिकता दी जानी चाहिए।


14
#include <stdio.h>
#include <time.h>

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;

  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  printf ( "Current local time and date: %s", asctime (timeinfo) );

  return 0;
} 

12

हां और आप वर्तमान में नामांकित लोकेल द्वारा निर्दिष्ट प्रारूपण नियमों के साथ ऐसा कर सकते हैं:

#include <iostream>
#include <iterator>
#include <string>

class timefmt
{
public:
    timefmt(std::string fmt)
        : format(fmt) { }

    friend std::ostream& operator <<(std::ostream &, timefmt const &);

private:
    std::string format;
};

std::ostream& operator <<(std::ostream& os, timefmt const& mt)
{
    std::ostream::sentry s(os);

    if (s)
    {
        std::time_t t = std::time(0);
        std::tm const* tm = std::localtime(&t);
        std::ostreambuf_iterator<char> out(os);

        std::use_facet<std::time_put<char>>(os.getloc())
            .put(out, os, os.fill(),
                 tm, &mt.format[0], &mt.format[0] + mt.format.size());
    }

    os.width(0);

    return os;
}

int main()
{
    std::cout << timefmt("%c");
}

आउटपुट: Fri Sep 6 20:33:31 2013


1
यह IMHO है, वास्तव में सबसे अच्छा जवाब है, क्योंकि यह एकमात्र है जो लोकल सेटिंग्स का सम्मान करता है, और क्योंकि इसे विस्तार से इस तरह के ध्यान के साथ क्रमादेशित किया जाता है (आप इसे ostream::sentryअक्सर नहीं देखते हैं )।
DevSolar

@DevSolar धन्यवाद। मैं यह नहीं कहूंगा कि यह सबसे अच्छा है। मैंने बेहतर क्रियान्वयन देखा है। लेकिन मुझे लगता है कि यह एक उदाहरण के लिए पर्याप्त है :)
0x499602D2

मेरे लिए संकलन नहीं किया। नौसिखिया होने के कारण मैं इस पर टिप्पणी नहीं कर सकता।
हिस्ट्रीस्टैम्प

8

आप C ++ 11 समय वर्ग का उपयोग कर सकते हैं:

    #include <iostream>
    #include <iomanip>
    using namespace std;

    int main() {

       time_t now = chrono::system_clock::to_time_t(chrono::system_clock::now());
       cout << put_time(localtime(&now), "%F %T") <<  endl;
      return 0;
     }

बाहर रखा:

2017-08-25 12:30:08

6

हमेशा __TIMESTAMP__प्रीप्रोसेसर मैक्रो होता है।

#include <iostream>

using namespace std

void printBuildDateTime () {
    cout << __TIMESTAMP__ << endl;
}

int main() {
    printBuildDateTime();
}

उदाहरण: सूर्य अप्रैल 13 11:28:08 2014


27
यह काम नहीं करेगा क्योंकि TIMESTAMP उस समय देगा जब फ़ाइल वर्तमान समय के बजाय बनाई जाती है।
फीलफ्री

3
इस पर पीछे देखते हुए, मुझे नहीं पता कि मुझे C ++ प्रश्न का उत्तर देने में सुविधा क्यों महसूस हुई
जेम्स रॉबर्ट अल्बर्ट

1
__TIMESTAMP__एक प्रीप्रोसेसर मैक्रो है जो मौजूदा समय (संकलन समय पर) के रूप में Ddd Mmm Date hh :: mm :: ss yyyy तक फैलता है। __TIMESTAMP__मैक्रो विशेष क्षण एक द्विआधारी बनाया गया था के बारे में जानकारी प्रदान करने के लिए इस्तेमाल किया जा सकता। देखें: cprogramming.com/reference/preprocessor/__TIMESTAMP__.html
सेल्फबूट

4

आप सीधे भी उपयोग कर सकते हैं ctime():

#include <stdio.h>
#include <time.h>

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;

  time ( &rawtime );
  printf ( "Current local time and date: %s", ctime (&rawtime) );

  return 0;
} 

4
VS2012 में मुझे #define _CRT_SECURE_NO_DEPRECATEप्रोग्राम
कंपाइल

4

मुझे यह लिंक मेरे कार्यान्वयन के लिए बहुत उपयोगी लगा: C ++ दिनांक और समय

यहाँ एक स्पष्ट "YYYYMMDD HHMMSS" आउटपुट स्वरूप प्राप्त करने के लिए, मैं अपने कार्यान्वयन में उपयोग किए जाने वाला कोड हूं। इसमें परम यूटीसी और स्थानीय समय के बीच स्विच करने के लिए है। आप अपनी आवश्यकता के अनुसार मेरे कोड को आसानी से संशोधित कर सकते हैं।

#include <iostream>
#include <ctime>

using namespace std;

/**
 * This function gets the current date time
 * @param useLocalTime true if want to use local time, default to false (UTC)
 * @return current datetime in the format of "YYYYMMDD HHMMSS"
 */

string getCurrentDateTime(bool useLocalTime) {
    stringstream currentDateTime;
    // current date/time based on current system
    time_t ttNow = time(0);
    tm * ptmNow;

    if (useLocalTime)
        ptmNow = localtime(&ttNow);
    else
        ptmNow = gmtime(&ttNow);

    currentDateTime << 1900 + ptmNow->tm_year;

    //month
    if (ptmNow->tm_mon < 9)
        //Fill in the leading 0 if less than 10
        currentDateTime << "0" << 1 + ptmNow->tm_mon;
    else
        currentDateTime << (1 + ptmNow->tm_mon);

    //day
    if (ptmNow->tm_mday < 10)
        currentDateTime << "0" << ptmNow->tm_mday << " ";
    else
        currentDateTime <<  ptmNow->tm_mday << " ";

    //hour
    if (ptmNow->tm_hour < 10)
        currentDateTime << "0" << ptmNow->tm_hour;
    else
        currentDateTime << ptmNow->tm_hour;

    //min
    if (ptmNow->tm_min < 10)
        currentDateTime << "0" << ptmNow->tm_min;
    else
        currentDateTime << ptmNow->tm_min;

    //sec
    if (ptmNow->tm_sec < 10)
        currentDateTime << "0" << ptmNow->tm_sec;
    else
        currentDateTime << ptmNow->tm_sec;


    return currentDateTime.str();
}

आउटपुट (UTC, EST):

20161123 000454
20161122 190454

तुमने क्यों पूछा ptmNow->tm_day < 9और क्या नहीं <10?
एसटीएफ

मैं एक दिन (कहना दिन X) चाहता हूं कि 9 से कम 0X हो (यानी 1 -> 01, 9 -> 09) हमारे डिजाइन से मेल खाने के लिए, अंतरिक्ष को भरने के लिए। दिन 10 बस स्ट्रिंग में 10 हो सकता है।
जो

इसलिए आपको यह पूछने की आवश्यकता है कि क्या यह <=9इसलिए है क्योंकि आप
STF

नोट मेरे पास 1+कोड में है। दिन / महीना 0. पर शुरू होता है
जो

महीने की शुरुआत 0 से होती है, लेकिन दिन की शुरुआत 1 से होती है!
एसटीएफ

3

यह G ++ के साथ काम करता है मुझे यकीन नहीं है कि यह आपकी मदद करता है। कार्यक्रम का उत्पादन:

The current time is 11:43:41 am
The current date is 6-18-2015 June Wednesday 
Day of month is 17 and the Month of year is 6,
also the day of year is 167 & our Weekday is 3.
The current year is 2015.

कोड:

#include <ctime>
#include <iostream>
#include <string>
#include <stdio.h>
#include <time.h>

using namespace std;

const std::string currentTime() {
time_t now = time(0);
struct tm tstruct;
char buf[80];
tstruct = *localtime(&now);
strftime(buf, sizeof(buf), "%H:%M:%S %P", &tstruct);
return buf;
}

const std::string currentDate() {
time_t now = time(0);
struct tm tstruct;
char buf[80];
tstruct = *localtime(&now);
strftime(buf, sizeof(buf), "%B %A ", &tstruct);
return buf;
}

int main() {
    cout << "\033[2J\033[1;1H"; 
std:cout << "The current time is " << currentTime() << std::endl;
    time_t t = time(0);   // get time now
    struct tm * now = localtime( & t );
    cout << "The current date is " << now->tm_mon + 1 << '-' 
         << (now->tm_mday  + 1) << '-'
         <<  (now->tm_year + 1900) 
         << " " << currentDate() << endl; 

 cout << "Day of month is " << (now->tm_mday) 
      << " and the Month of year is " << (now->tm_mon)+1 << "," << endl;
    cout << "also the day of year is " << (now->tm_yday) 
         << " & our Weekday is " << (now->tm_wday) << "." << endl;
    cout << "The current year is " << (now->tm_year)+1900 << "." 
         << endl;
 return 0;  
}

यह एक अच्छा उदाहरण है, लेकिन लाइन 'स्ट्रैफ़ाइम (buf, sizeof (buf)), "% H:% M:% S% P", & tstruct);' % P को% p में परिवर्तित किया जाना चाहिए (नवीनतम एक मानक है, ऊपरी मामला MSVC 2015 में जोर देता है)।
फर्नांडो गोंजालेज सांचेज़

3

यह मेरे लिए लिनक्स (आरएचईएल) और विंडोज (x64) पर जी ++ और ओपनएमपी को लक्षित करने के लिए संकलित है:

#include <ctime>
#include <iostream>
#include <string>
#include <locale>

////////////////////////////////////////////////////////////////////////////////
//
//  Reports a time-stamped update to the console; format is:
//       Name: Update: Year-Month-Day_of_Month Hour:Minute:Second
//
////////////////////////////////////////////////////////////////////////////////
//
//  [string] strName  :  name of the update object
//  [string] strUpdate:  update descripton
//          
////////////////////////////////////////////////////////////////////////////////

void ReportTimeStamp(string strName, string strUpdate)
{
    try
    {
        #ifdef _WIN64
            //  Current time
            const time_t tStart = time(0);
            //  Current time structure
            struct tm tmStart;

            localtime_s(&tmStart, &tStart);

            //  Report
            cout << strName << ": " << strUpdate << ": " << (1900 + tmStart.tm_year) << "-" << tmStart.tm_mon << "-" << tmStart.tm_mday << " " << tmStart.tm_hour << ":" << tmStart.tm_min << ":" << tmStart.tm_sec << "\n\n";
        #else
            //  Current time
            const time_t tStart = time(0);
            //  Current time structure
            struct tm* tmStart;

            tmStart = localtime(&tStart);

            //  Report
            cout << strName << ": " << strUpdate << ": " << (1900 + tmStart->tm_year) << "-" << tmStart->tm_mon << "-" << tmStart->tm_mday << " " << tmStart->tm_hour << ":" << tmStart->tm_min << ":" << tmStart->tm_sec << "\n\n";
        #endif

    }
    catch (exception ex)
    {
        cout << "ERROR [ReportTimeStamp] Exception Code:  " << ex.what() << "\n";
    }

    return;
}

3

C ++ में वर्तमान सिस्टम दिनांक और समय प्राप्त करने के लिए आप निम्न कोड का उपयोग कर सकते हैं :

    #include <iostream>
    #include <time.h> //It may be #include <ctime> or any other header file depending upon
                     // compiler or IDE you're using 
    using namespace std;

    int main() {
       // current date/time based on current system
       time_t now = time(0);

       // convert now to string form
       string dt = ctime(&now);

       cout << "The local date and time is: " << dt << endl;
    return 0;
    }

पुनश्च: अधिक जानकारी के लिए इस साइट पर जाएँ ।


2

Ffead-सीपीपी विभिन्न कार्यों के लिए कई उपयोगिता वर्गों प्रदान करता है, ऐसे ही एक वर्ग है दिनांक वर्ग जो सही तिथि संचालन से तारीख अंकगणित के लिए सुविधाओं की एक बहुत प्रदान करता है, वहाँ भी एक है टाइमर समय कार्यों के लिए प्रदान की जाती वर्ग। आप उसी पर एक नज़र डाल सकते हैं।


2

http://www.cplusplus.com/reference/ctime/strftime/

यह बिल्ट-इन विकल्पों का एक उचित सेट प्रदान करता है।


1
ज़रूर: time_t rawTime; time(&rawTime); struct tm *timeInfo; char buf[80]; timeInfo = localtime(&rawTime); strftime(buf, 80, "%T", timeInfo); यह विशेष रूप से केवल एचएच डालता है: एमएम: एसएस। मेरी पहली पोस्ट तो मुझे यकीन नहीं है कि कोड प्रारूप को सही कैसे प्राप्त किया जाए। उसके लिए माफ़ करना।
21

1

localtime_s () संस्करण:

#include <stdio.h>
#include <time.h>

int main ()
{
  time_t current_time;
  struct tm  local_time;

  time ( &current_time );
  localtime_s(&local_time, &current_time);

  int Year   = local_time.tm_year + 1900;
  int Month  = local_time.tm_mon + 1;
  int Day    = local_time.tm_mday;

  int Hour   = local_time.tm_hour;
  int Min    = local_time.tm_min;
  int Sec    = local_time.tm_sec;

  return 0;
} 

1
#include <iostream>
#include <chrono>
#include <string>
#pragma warning(disable: 4996)
// Ver: C++ 17 
// IDE: Visual Studio
int main() {
    using namespace std; 
    using namespace chrono;
    time_point tp = system_clock::now();
    time_t tt = system_clock::to_time_t(tp);
    cout << "Current time: " << ctime(&tt) << endl;
    return 0;
}

0
#include <Windows.h>

void main()
{
     //Following is a structure to store date / time

SYSTEMTIME SystemTime, LocalTime;

    //To get the local time

int loctime = GetLocalTime(&LocalTime);

    //To get the system time

int systime = GetSystemTime(&SystemTime)

}

5
सवाल क्रॉस-प्लेटफॉर्म के लिए पूछता है। Windows.h Windows- विशिष्ट है, और void mainमानक C / C ++ भी नहीं है।
derpface

0

आप उपयोग कर सकते हैं boost:

#include <boost/date_time/gregorian/gregorian.hpp>
#include <iostream>
using namespace boost::gregorian;

int main()
{
    date d = day_clock::universal_day();
    std::cout << d.day() << " " << d.month() << " " << d.year();
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.