Difference between revisions of "cpp/chrono/c/mktime"
Andreas Krug (Talk | contribs) m (http -> https) |
|||
(13 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
− | {{cpp/title| mktime}} | + | {{cpp/title|mktime}} |
{{cpp/chrono/c/navbar}} | {{cpp/chrono/c/navbar}} | ||
− | {{ddcl | header=ctime | | + | {{ddcl|header=ctime| |
std::time_t mktime( std::tm* time ); | std::time_t mktime( std::tm* time ); | ||
}} | }} | ||
− | Converts local calendar time to a time since epoch as a {{ | + | Converts local calendar time to a time since epoch as a {{lc|std::time_t}} object. {{c|time->tm_wday}} and {{c|time->tm_yday}} are ignored. The values in {{c|time}} are permitted to be outside their normal ranges. |
− | A negative value of {{ | + | A negative value of {{c|time->tm_isdst}} causes {{tt|mktime}} to attempt to determine if Daylight Saving Time was in effect. |
− | If the conversion is successful, the {{ | + | If the conversion is successful, the {{c|time}} object is modified. All fields of {{c|time}} are updated to fit their proper ranges. {{c|time->tm_wday}} and {{c|time->tm_yday}} are recalculated using information available in other fields. |
===Parameters=== | ===Parameters=== | ||
− | {{ | + | {{par begin}} |
− | {{ | + | {{par|time|pointer to a {{lc|std::tm}} object specifying local calendar time to convert}} |
− | {{ | + | {{par end}} |
===Return value=== | ===Return value=== | ||
− | Time since epoch as a {{ | + | Time since epoch as a {{lc|std::time_t}} object on success or {{c|-1}} if {{c|time}} cannot be represented as a {{lc|std::time_t}} object. |
+ | |||
+ | ===Notes=== | ||
+ | If the {{lc|std::tm}} object was obtained from {{lc|std::get_time}} or the POSIX [https://pubs.opengroup.org/onlinepubs/009695399/functions/strptime.html {{tt|strptime}}], the value of {{tt|tm_isdst}} is indeterminate, and needs to be set explicitly before calling {{tt|mktime}}. | ||
===Example=== | ===Example=== | ||
{{example | {{example | ||
− | + | |Construct a local time explicitly. | |
− | + | |code= | |
− | + | ||
− | + | ||
#include <ctime> | #include <ctime> | ||
− | + | #include <iomanip> | |
+ | #include <iostream> | ||
+ | #include <sstream> | ||
+ | |||
int main() | int main() | ||
{ | { | ||
− | + | setenv("TZ", "/usr/share/zoneinfo/America/Los_Angeles", 1); // POSIX-specific | |
− | std::tm tm = | + | |
− | std:: | + | std::tm tm{}; // Zero initialise |
− | tm | + | tm.tm_year = 2020 - 1900; // 2020 |
− | + | tm.tm_mon = 2 - 1; // February | |
− | std::cout << " | + | 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'; | ||
} | } | ||
− | + | |p=true | |
− | + | |output= | |
− | + | local: Sat Feb 15 10:15:00 2020 PST | |
}} | }} | ||
===See also=== | ===See also=== | ||
− | {{ | + | {{dsc begin}} |
− | {{ | + | {{dsc inc|cpp/chrono/c/dsc localtime}} |
− | {{ | + | {{dsc see c|c/chrono/mktime}} |
− | {{ | + | {{dsc end}} |
− | + | {{langlinks|de|es|fr|it|ja|pl|pt|ru|zh}} | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |
Latest revision as of 13:45, 9 September 2023
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.
Contents |
[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) | |
C documentation for mktime
|