Spec-Zone.ru › C

localtime, localtime_r, localtime_s

Определено в заголовочном файле <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 может быть небезопасной для использования в многопоточной среде.

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

См. также

gmtimegmtime_rgmtime_s
(C23)(C11)
преобразует время, прошедшее с начала эпохи, в календарное время, выраженное во всемирном координированном времени (UTC)
(функция)
Документация по C++ для localtime

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/chrono/localtime

Spec-Zone.ru

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