std::mktime(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’… NAME πŸ’…

std::mktime - std::mktime β€” okay bestie, this is the std::mktime(3) page from the C++ Standard Libary manual. The name is literally std::mktime - std::mktime, self-titled icon behavior, no cap. πŸ’…


✨ Synopsis ✨

First things first: she's defined in header <ctime> πŸŽ€. Here's the signature, exact:

std::time_t mktime( std::tm* time );

She converts local calendar time to a time since epoch as a std::time_t object. Obsessed with epochs, honestly.

time->tm_wday and time->tm_yday are ignored. The values in time are permitted to be outside their normal ranges. Totally allowed to be a little unhinged. πŸ’€

A negative value of time->tm_isdst causes mktime to attempt to determine if Daylight Saving Time was in effect. She's doing her detective era πŸ•΅οΈβ€β™€οΈ.

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. Glow-up, but make it calendar math. ⭐

🫢 Parameters 🫢

  • time β€” pointer to a std::tm object specifying local calendar time to convert. That's the whole parameter, bestie, she only needs one. 🫢

πŸŽ€ 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. So either you get the epoch glow or a sad little -1. 😭

🧚 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.

Real talk: indeterminate tm_isdst is not the vibe. Set it explicitly before you call mktime, bestie. 🚨

🌸 Example 🌸

Goal: construct a local time explicitly. Cute, direct, we love a purposeful example. πŸ’–

// Run this code β€” yes, run it, bestie πŸƒβ€β™€οΈπŸ’¨

        #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

πŸ¦‹ See also πŸ¦‹

  • localtime β€” converts time since epoch to calendar time expressed as local time. It's a function. πŸ•°οΈ
  • C documentation for mktime β€” the C edition, for when you need the same mktime energy but in C. 🌈

Source/version http://cppreference.com, date 2024.06.10, page std::mktime(3). That's the whole footer vibe, bestie β€” mwah, go slay some epochs πŸ’–βœ¨πŸ‘‘

πŸ“¦ where this page comes from