Spec-Zone.ru › C

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

См. также

localtimelocaltime_rlocaltime_s
(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

Spec-Zone.ru

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