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