// tm struct example

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

int main()
{
    // get current date/time
    time_t now = time(0);

    struct tm* timeInfo = localtime(&now);

    cout << setfill('0');

    cout << "The current time is " << timeInfo->tm_mon + 1 << '/' << setw(2)
            << timeInfo->tm_mday << '/' << timeInfo->tm_year % 100 << ' '
            << timeInfo->tm_hour % 12 << ':' << setw(2) << timeInfo->tm_min << ':'
            << setw(2) << timeInfo->tm_sec
            << (timeInfo->tm_hour >= 12 ? " PM" : " AM") << endl;

    // When is the final
    struct tm theFinal;
    theFinal.tm_mon = 11; // December
    theFinal.tm_mday = 11;
    theFinal.tm_year = 117; //2017
    theFinal.tm_hour = 11;
    theFinal.tm_min = 30;
    theFinal.tm_sec = 0;
    theFinal.tm_isdst = 1; // is daylight savings time

    time_t finalTime = mktime(&theFinal);

    cout << "The final is " << ctime(&finalTime) << endl;

    int secondsToFinal = static_cast<int>(difftime(finalTime, now));

    const int SecsPerDay = 24 * 60 * 60;
    const int SecsPerHour = 60 * 60;
    const int SecsPerMin = 60;

    // calculate the time until the final
    int days, hours, minutes, seconds;
    days = secondsToFinal / SecsPerDay;
    hours = (secondsToFinal - days * SecsPerDay) / SecsPerHour;
    minutes = (secondsToFinal - days * SecsPerDay - hours * SecsPerHr) / SecsPerMin;
    seconds = secondsToFinal - days * SecsPerDay - hours * SecsPerHr - minutes*SecsPerMin;

    cout << "Time until final = "  
         << days << " days " << hours << " hours " << minutes << " minutes " << seconds << " seconds" << endl;
}