Spec-Zone.ru › C++

std::timegm

Определён в заголовке <ctime>
time_t timegm( struct tm* timeptr );
(начиная с C++26)

Преобразует разложенное UTC-время в timeptr в календарное время с тем же представлением, что и значения, возвращаемые функцией std::time(). Исходные значения tm_wday и tm_yday в timeptr игнорируются, а исходные значения остальных компонентов не ограничиваются диапазонами, указанными ранее.

В случае успеха значения tm_wday и tm_yday устанавливаются соответствующим образом, а остальные компоненты устанавливаются так, чтобы представлять заданное календарное время, но их значения приводятся к диапазонам, указанным ранее. Итоговое значение tm_mday не устанавливается до тех пор, пока не будут определены tm_mon и tm_year.

Параметры

timeptr - указатель на объект типа std::tm

Возвращаемое значение

Заданное календарное время, закодированное как значение типа time_t.

Возвращает (std::time_t)(-1) и не изменяет значение tm_wday, если календарное время невозможно представить в кодировке std::time_t или значение в tm_year невозможно представить как int.

Пример

#include <cstdio>
#include <cstdlib>
#include <ctime>

int main()
{
    std::tm tm_utc;
    tm_utc.tm_year  = 2024 - 1900; // years since 1900
    tm_utc.tm_mon   = 2 - 1;       // months since January (0‑11)
    tm_utc.tm_mday  = 15;          // day of the month
    tm_utc.tm_hour  = 12;
    tm_utc.tm_min   = 30;
    tm_utc.tm_sec   = 45;
    tm_utc.tm_isdst = 0;            // DST flag not used for UTC

    // Convert the broken‑down UTC time to a time_t value.
    // timegm() assumes the struct tm describes UTC, avoiding any
    // timezone or DST adjustments that localtime() would apply.
    std::time_t utc_seconds = timegm(&tm_utc);
    if (utc_seconds == static_cast<time_t>(-1))
    {
        std::perror("timegm");
        return EXIT_FAILURE;
    }

    std::printf("UTC time: %04d-%02d-%02d %02d:%02d:%02d → %ld seconds since the epoch\n",
           tm_utc.tm_year + 1900,
           tm_utc.tm_mon  + 1,
           tm_utc.tm_mday,
           tm_utc.tm_hour,
           tm_utc.tm_min,
           tm_utc.tm_sec,
           static_cast<long>(utc_seconds));

    std::tm check;
    gmtime_r(&utc_seconds, &check);
    std::printf("Back‑converted: %04d-%02d-%02d %02d:%02d:%02d UTC\n",
           check.tm_year + 1900,
           check.tm_mon  + 1,
           check.tm_mday,
           check.tm_hour,
           check.tm_min,
           check.tm_sec);
    return EXIT_SUCCESS;
}

Возможный вывод:

UTC time: 2024-02-15 12:30:45 → 1708000245 seconds since the epoch
Back‑converted: 2024-02-15 12:30:45 UTC

См. также

gmtimegmtime_r
(C++26)
преобразует время, прошедшее с начала эпохи, в календарное время, выраженное во всемирном координированном времени
(функция)
time
возвращает текущее системное время как время, прошедшее с начала эпохи
(функция)
Документация C для timegm

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/chrono/c/timegm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API