Comment obtenir l'heure actuelle et la date en C++?

Existe-t-il un moyen multiplateforme pour obtenir la date et l'heure actuelles en C++?

333
demandé sur jackyalcine 2009-06-15 23:35:38

22 réponses

en C++ 11 Vous pouvez utiliser std::chrono::system_clock::now()

390
répondu Frederick The Fool 2018-07-09 07:07:13

c++ partage ses fonctions date / heure avec C. La structure tm est probablement la plus facile pour un programmeur C++ de travailler avec - les tirages suivants date d'aujourd'hui:

#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";
}
440
répondu milleniumbug 2018-03-21 22:24:24

vous pouvez essayer le code multiplate - forme suivant pour obtenir la date/heure actuelle:

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

sortie:

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

s'il vous Plaît visitez ici pour plus d'informations sur le format de date/heure

161
répondu TrungTN 2014-03-12 06:35:20

STD c bibliothèques fournir time() . Il s'agit de secondes de l'époque et peut être converti en date et H:M:S en utilisant les fonctions C standard. Boost a aussi une bibliothèque heure/date que vous pouvez vérifier.

time_t  timev;
time(&timev);
138
répondu Martin York 2015-12-01 17:40:14

la bibliothèque standard C++ ne fournit pas un type de date approprié. C++ hérite de C les structures et les fonctions pour la manipulation de date et d'heure, ainsi que quelques fonctions d'entrée et de sortie de date/heure qui tiennent compte de la localisation.

// 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;
}
30
répondu Vaibhav Patle 2011-07-13 19:35:32

Nouvelle réponse à une ancienne question:

La question ne précise pas dans quel fuseau horaire. Il y a deux possibilités raisonnables:

  1. In UTC.
  2. dans le fuseau horaire local de l'ordinateur.

pour 1, vous pouvez utiliser cette bibliothèque de date et le programme suivant:

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

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

qui vient de sortir pour moi:

2015-08-18 22:08:18.944211

la bibliothèque de date ajoute essentiellement un opérateur de streaming pour std::chrono::system_clock::time_point . Il ajoute également beaucoup d'autres belles fonctionnalités, mais qui n'est pas utilisée dans ce programme simple.

si vous préférez 2 (l'heure locale), il y a une timezone library qui construit sur le dessus de la date library . Ces deux bibliothèques sont open source et plate-forme croisée , en supposant que le compilateur supporte C++11 ou 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';
}

qui pour moi vient de sortir:

2015-08-18 18:08:18.944211 EDT

le type de résultat de make_zoned est un date::zoned_time qui est un appariement d'un date::time_zone et un std::chrono::system_clock::time_point . Cette paire représente une heure locale, mais peut aussi représenter UTC, en fonction de la façon dont vous l'interrogez.

avec la sortie ci-dessus, vous pouvez voir que mon ordinateur est actuellement dans un fuseau horaire avec un Décalage UTC de 4h, et une abréviation de l'EDT.

si un autre fuseau horaire est désiré, cela peut aussi être accompli. Par exemple , pour trouver L'heure actuelle à Sydney, Australie il suffit de changer la construction de la variable local en:

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

et la sortie change en:

2015-08-19 08:08:18.944211 AEST
20
répondu Howard Hinnant 2016-06-30 02:11:05

(pour les autres googleurs)

il y a aussi 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();
17
répondu Offirmo 2012-10-20 13:18:41
#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;
} 
14
répondu etcheve 2012-04-26 11:02:24

Oui et vous pouvez le faire avec les règles de mise en forme spécifiée par le imprégnée de paramètres régionaux:

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

sortie: Fri Sep 6 20:33:31 2013

11
répondu 0x499602D2 2013-10-11 20:27:00
auto time = std::time(nullptr);
std::cout << std::put_time(std::localtime(&time), "%F %T%z"); // ISO 8601 format.

Obtenir l'heure actuelle, soit à l'aide de std::time() ou std::chrono::system_clock::now() (ou d'une autre type d'horloge ).

std::put_time() (C++11) et strftime() (C) offre un grand nombre de formateuses pour la sortie de ces temps.

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

La séquence des formateurs questions:

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

les maquettes de strftime() sont similaires:

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
}

souvent, le" capital formatter "signifie" version complète " et "lowercase" signifie abréviation (par exemple Y: 2017, y: 17).


paramètres locaux modifier la sortie:

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

sortie Possible ( Coliru , Compilateur "Explorateur de 1519180920" ):

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

j'ai utilisé std::gmtime() pour la conversion en UTC. std::localtime() est fourni pour convertir en heure locale.

tenir compte que asctime() / ctime() les réponses qui ont été mentionnées dans d'autres réponses sont maintenant marquées comme étant dévalorisées et strftime() devrait être préféré.

9
répondu Roi Danton 2017-09-11 09:15:53

il y a toujours la macro préprocesseur __TIMESTAMP__ .

#include <iostream>

using namespace std

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

int main() {
    printBuildDateTime();
}

exemple: Sun Apr 13 11: 28 :08 2014

5
répondu James Robert Albert 2014-04-13 18:31:39

, vous pouvez utiliser C++ 11 temps de classe:

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

sortie:

2017-08-25 12:30:08
5
répondu Sam Abdul 2017-08-24 00:29:27

vous pouvez également utiliser directement 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
répondu Abhishek Gupta 2012-12-26 16:54:40

j'ai trouvé ce lien très utile pour mon application: C++ Date et heure

voici le code que j'utilise dans mon implémentation, pour obtenir un format de sortie clair "YYYYMMDD HHMMSS". Le paramètre est pour passer de L'heure UTC à l'heure locale. Vous pouvez facilement modifier mon code pour répondre à vos besoins.

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

sortie (UTC, EST):

20161123 000454
20161122 190454
4
répondu Joe 2017-03-10 15:22:08

cela compilé pour moi sur Linux (RHEL) et Windows (x64) ciblant g++ et 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;
}
3
répondu Epsilon3 2016-07-21 17:22:09

le ffead-cpp fournit des classes d'utilité multiples pour diverses tâches, une de ces classes est la classe Date qui fournit un grand nombre de caractéristiques à partir de la Date des opérations jusqu'à la date arithmétique, il ya aussi un minuterie classe prévue pour les opérations de synchronisation. Vous pouvez regarder le même.

2
répondu user775757 2012-06-28 03:24:44

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

Cette solution intégrée semble offrir un ensemble raisonnable d'options.

2
répondu bduhbya 2014-08-07 17:35:28

cela fonctionne avec G++ Je ne suis pas sûr que cela vous aide. Sortie du programme:

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.

Code:

#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 << "3[2J3[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;  
}
2
répondu Anonymous 2016-05-20 06:54:24
#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)

}
1
répondu user3414278 2014-06-20 03:07:42

localtime_s() version:

#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
répondu sailfish009 2017-08-01 09:11:17

vous pourriez utiliser 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();
}
0
répondu Andreas DM 2016-04-08 16:35:21

vous pouvez utiliser le code suivant pour obtenir la date et l'heure du système actuel en 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: visitez ce site pour plus d'information.

0
répondu John 2018-08-11 12:46:42