gmtime, gmtime_r, gmtime_s
Defined in header <time.h> |
||
|---|---|---|
struct tm *gmtime ( const time_t *timer ); |
(1) | |
struct tm *gmtime_r( const time_t *timer, struct tm *buf ); |
(2) | (since C23) |
struct tm *gmtime_s( const time_t *restrict timer, struct tm *restrict buf ); |
(3) | (since C11) |
1) Преобразует заданное время с момента эпохи (значение, на которое указывает
timer) в календарное время, выраженное в координированном универсальном времени (UTC) в формате struct tm. Результат хранится в статическом хранилище, а указатель на это статическое хранилище возвращается.
2) Аналогично (1), за исключением того, что функция использует предоставленное пользователем хранилище
buf для результата.
3) Аналогично (1), за исключением того, что функция использует предоставленное пользователем хранилище
buf для результата, и при этом следующие ошибки обнаруживаются во время выполнения и вызывают функцию текущего установленного обработчика ограничений обработчика ограничений: -
-
timerилиbufявляется нулевым указателем
-
- Как и во всех функциях с проверкой границ,
gmtime_sгарантированно доступна только в том случае, если__STDC_LIB_EXT1__определено реализацией, и если пользователь определяет__STDC_WANT_LIB_EXT1__как целочисленную константу1перед включением<time.h>.
Параметры
| timer | - | указатель на объект time_t для преобразования |
| buf | - | указатель на объект struct tm для хранения результата |
Возвращаемое значение
1) указатель на статический внутренний объект
tm при успешном выполнении или нулевой указатель в противном случае. Структура может быть общей между gmtime, localtime, и ctime и может перезаписываться при каждом вызове.
2-3) копия указателя
buf, или нулевой указатель при ошибке (которая может быть нарушением ограничения во время выполнения или неудачей при преобразовании указанного времени в UTC)
Примечания
gmtime может не быть потокобезопасной.
POSIX требует, чтобы gmtime и gmtime_r установили errno в EOVERFLOW, если они терпят неудачу из-за слишком большого аргумента.
Реализация gmtime_s в Microsoft CRT несовместима со стандартом C, так как она меняет порядок параметров.
Пример
#define __STDC_WANT_LIB_EXT1__ 1
#define _XOPEN_SOURCE // for putenv
#include <time.h>
#include <stdio.h>
#include <stdlib.h> // for putenv
int main(void)
{
time_t t = time(NULL);
printf("UTC: %s", asctime(gmtime(&t)));
printf("local: %s", asctime(localtime(&t)));
// POSIX-specific
putenv("TZ=Asia/Singapore");
printf("Singapore: %s", asctime(localtime(&t)));
#ifdef __STDC_LIB_EXT1__
struct tm buf;
char str[26];
asctime_s(str,sizeof str,gmtime_s(&t, &buf));
printf("UTC: %s", str);
asctime_s(str,sizeof str,localtime_s(&t, &buf));
printf("local: %s", str);
#endif
}Возможный вывод:
UTC: Fri Sep 15 14:22:05 2017 local: Fri Sep 15 14:22:05 2017 Singapore: Fri Sep 15 22:22:05 2017 UTC: Fri Sep 15 14:22:05 2017 local: Fri Sep 15 14:22:05 2017
Ссылки
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.27.3.3 Функция gmtime (с. 288)
- K.3.8.2.3 Функция gmtime_s (с. 454-455)
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.27.3.3 Функция gmtime (с. 393-394)
- K.3.8.2.3 Функция gmtime_s (с. 626-627)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.23.3.3 Функция gmtime (с. 343)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
- 4.12.3.3 Функция gmtime
См. также
|
(C23)(C11) |
преобразует время с момента эпохи в календарное время, выраженное как местное время (функция) |
Документация C++ для gmtime |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/chrono/gmtime