Spec-Zone.ru › C

timegm

Определено в заголовочном файле <time.h>
time_t timegm( struct tm* timeptr );
(начиная с C23)

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

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

Параметры

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

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

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

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

Пример

#define _POSIX_C_SOURCE 200809L
#include <stdio.h>
#include <time.h>

int main()
{
    struct tm tm_utc =
    {
        .tm_year  = 2024 - 1900, // years since 1900
        .tm_mon   = 2 - 1,       // months since January (0‑11)
        .tm_mday  = 15,          // day of the month
        .tm_hour  = 12,
        .tm_min   = 30,
        .tm_sec   = 45,
        .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.
    time_t utc_seconds = timegm(&tm_utc);
    if (utc_seconds == (time_t)-1)
    {
        perror("timegm");
        return 1;
    }

    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,
           (long)utc_seconds);

    struct tm check;
    gmtime_r(&utc_seconds, &check);
    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);
}

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

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

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
    • 7.29.2.4 Функция timegm (с. 402–403)

См. также

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

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

Spec-Zone.ru

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