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)
См. также
|
(C23)(C11) | преобразует время, прошедшее с начала эпохи, в календарное время, выраженное как всемирное координированное время (UTC) (функция) |
| возвращает текущее календарное время системы как время, прошедшее с начала эпохи (функция) |
|
Документация C++ для timegm |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/chrono/timegm