How to get current time and date in C++?

后端 未结 24 1478
刺人心
刺人心 2020-11-22 06:55

Is there a cross-platform way to get the current date and time in C++?

相关标签:
24条回答
  • 2020-11-22 07:26

    You can use the following code to get the current system date and time in 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;
        }
    

    PS: Visit this site for more information.

    0 讨论(0)
  • 2020-11-22 07:26
    #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 讨论(0)
  • 2020-11-22 07:27

    This compiled for me on Linux (RHEL) and Windows (x64) targeting g++ and OpenMP:

    #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;
    }
    
    0 讨论(0)
  • 2020-11-22 07:29

    you could use C++ 11 time class:

        #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;
         }
    

    out put:

    2017-08-25 12:30:08
    
    0 讨论(0)
  • 2020-11-22 07:29

    You can also directly use 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;
    } 
    
    0 讨论(0)
  • 2020-11-22 07:31
    auto time = std::time(nullptr);
    std::cout << std::put_time(std::localtime(&time), "%F %T%z"); // ISO 8601 format.
    

    Get the current time either using std::time() or std::chrono::system_clock::now() (or another clock type).

    std::put_time() (C++11) and strftime() (C) offer a lot of formatters to output those times.

    #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"); 
    }
    

    The sequence of the formatters matters:

    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
    

    The formatters of strftime() are similar:

    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
    }
    

    Often, the capital formatter means "full version" and lowercase means abbreviation (e.g. Y: 2017, y: 17).


    Locale settings alter the output:

    #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");        
    }
    

    Possible output (Coliru, Compiler Explorer):

    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
    

    I've used std::gmtime() for conversion to UTC. std::localtime() is provided to convert to local time.

    Heed that asctime()/ctime() which were mentioned in other answers are marked as deprecated now and strftime() should be preferred.

    0 讨论(0)
提交回复
热议问题