< cpp‎ | chrono‎ | c
Utilities library
Language support
Type support (basic types, RTTI)
Library feature-test macros (C++20)
Dynamic memory management
Program utilities
Coroutine support (C++20)
Variadic functions
Debugging support
Three-way comparison
General utilities
Date and time
Function objects
Formatting library (C++20)
Relational operators (deprecated in C++20)
Integer comparison functions
Swap and type operations
Common vocabulary types
Elementary string conversions

C-style date and time utilities
Time manipulation
Format conversions
Defined in header <ctime>
std::time_t mktime( std::tm* time );

Converts local calendar time to a time since epoch as a std::time_t object. time->tm_wday and time->tm_yday are ignored. The values in time are permitted to be outside their normal ranges.

A negative value of time->tm_isdst causes mktime to attempt to determine if Daylight Saving Time was in effect.

If the conversion is successful, the time object is modified. All fields of time are updated to fit their proper ranges. time->tm_wday and time->tm_yday are recalculated using information available in other fields.


[edit] Parameters

time - pointer to a std::tm object specifying local calendar time to convert

[edit] Return value

Time since epoch as a std::time_t object on success or -1 if time cannot be represented as a std::time_t object.

[edit] Notes

If the std::tm object was obtained from std::get_time or the POSIX strptime, the value of tm_isdst is indeterminate, and needs to be set explicitly before calling mktime.

[edit] Example

Construct a local time explicitly.

#include <ctime>
#include <iomanip>
#include <iostream>
#include <sstream>
int main()
    setenv("TZ", "/usr/share/zoneinfo/America/Los_Angeles", 1); // POSIX-specific
    std::tm tm{}; // Zero initialise
    tm.tm_year = 2020 - 1900; // 2020
    tm.tm_mon = 2 - 1; // February
    tm.tm_mday = 15; // 15th
    tm.tm_hour = 10;
    tm.tm_min = 15;
    tm.tm_isdst = 0; // Not daylight saving
    std::time_t t = std::mktime(&tm); 
    std::tm local = *std::localtime(&t);
    std::cout << "local: " << std::put_time(&local, "%c %Z") << '\n';

Possible output:

local: Sat Feb 15 10:15:00 2020 PST

[edit] See also

converts time since epoch to calendar time expressed as local time
(function) [edit]
C documentation for mktime