gmtime, gmtime_r, gmtime_s
Определено в заголовочном файле <time.h> | ||
|---|---|---|
struct tm* gmtime ( const time_t* timer ); | (1) | |
struct tm* gmtime_r( const time_t* timer, struct tm* buf ); | (2) | (начиная с C23) |
struct tm* gmtime_s( const time_t* restrict timer, struct tm* restrict buf ); | (3) | (начиная с C11) |
1) Преобразует заданное время, прошедшее с начала эпохи (значение типа
time_t, на которое указывает 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 <stdio.h>
#include <stdlib.h> // for putenv
#include <time.h>
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
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
- 7.27.3.3 Функция gmtime (стр.: TBD)
- K.3.8.2.3 Функция gmtime_s (стр.: TBD)
- Стандарт 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/c/chrono/gmtime