Namespaces
Variants

localtime, localtime_r, localtime_s

From cppreference.net
Определено в заголовочном файле <time.h>
struct tm * localtime ( const time_t * timer ) ;
(1)
struct tm * localtime_r ( const time_t * timer, struct tm * buf ) ;
(2) (начиная с C23)
struct tm * localtime_s ( const time_t * restrict timer, struct tm * restrict buf ) ;
(3) (начиная с C11)
1) Преобразует заданное время с начала эпохи (значение time_t , на которое указывает timer ) в календарное время, выраженное в локальном времени, в формате struct tm . Результат сохраняется в статической памяти, и возвращается указатель на эту статическую область памяти.
2) То же, что и (1) , за исключением того, что функция использует предоставленное пользователем хранилище buf для результата.
3) Аналогично (1) , за исключением того, что функция использует предоставленное пользователем хранилище buf для результата, и следующие ошибки обнаруживаются во время выполнения и вызывают текущую установленную constraint handler функцию:
  • timer или buf являются нулевыми указателями
Как и все функции с проверкой границ, localtime_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 , или нулевой указатель при ошибке (что может быть нарушением ограничения времени выполнения или неудачей преобразования указанного времени в локальное календарное время).

Примечания

Функция localtime может быть не потокобезопасной. Реализация в Microsoft CRT является потокобезопасной.

POSIX требует, чтобы localtime и localtime_r устанавливали errno в значение EOVERFLOW при неудаче из-за слишком большого значения аргумента.

POSIX определяет , что информация о часовом поясе определяется функциями localtime и localtime_r таким образом, как если бы они вызывали tzset , которая считывает переменную окружения TZ .

Реализация функции localtime_s в Microsoft CRT несовместима со стандартом C, поскольку имеет обратный порядок параметров и возвращает errno_t .

Пример

#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.4 Функция localtime (стр.: TBD)
  • K.3.8.2.4 Функция localtime_s (стр.: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.27.3.4 Функция localtime (стр: 288)
  • K.3.8.2.4 Функция localtime_s (стр: 455)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.27.3.4 Функция localtime (стр: 394)
  • K.3.8.2.4 Функция localtime_s (стр: 627)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.23.3.4 Функция localtime (стр. 343)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
  • 4.12.3.4 Функция localtime

Смотрите также

преобразует время с начала эпохи в календарное время, выраженное в формате Всемирного координированного времени (UTC)
(функция)