Times and dates in C++

C++ represents times and dates in two main ways:

Here is an example:

#include <ctime>
time_t mytt = time(0);           // Current date and time as an int
tm * mytm = localtime(&mytt);    // convert to a tm struct

cout << "year " << (mytm->tm_year + 1900) << endl;
cout << "day " << mytm->tm_wday << endl;  // Sunday = 0

Note that above, localtime() returns a pointer to a struct, hence the need for the -> operator to access its member variables. The library contains several other functions for manipulating times and dates.

A C++ class representing the date information you are interested in is frequently a good idea.

Here is the full declaration of struct tm:

struct tm
{
    int     tm_sec;         /* Seconds: 0-59 (K&R says 0-61?) */
    int     tm_min;         /* Minutes: 0-59 */
    int     tm_hour;        /* Hours since midnight: 0-23 */
    int     tm_mday;        /* Day of the month: 1-31 */
    int     tm_mon;         /* Months *since* january: 0-11 */
    int     tm_year;        /* Years since 1900 */
    int     tm_wday;        /* Days since Sunday (0-6) */
    int     tm_yday;        /* Days since Jan. 1: 0-365 */
    int     tm_isdst;       /* +1 Daylight Savings Time, 0 No DST,
                             * -1 don't know */
};

The apparent uncertainty isn't mine; these are the precise contents of the mingw header file.