Partilhar via


localtime_s, _localtime32_s, _localtime64_s

Converte um time_t valor de hora em uma tm estrutura e corrige para o fuso horário local. Essas funções são versões do , _localtime32com aprimoramentos delocaltime segurança, _localtime64 conforme descrito em Recursos de segurança no CRT.

Sintaxe

errno_t localtime_s( // See note in remarks section about linkage
   struct tm* const tmDest,
   time_t const* const sourceTime
);
errno_t _localtime32_s(
   struct tm* tmDest,
   __time32_t const* sourceTime
);
errno_t _localtime64_s(
   struct tm* tmDest,
   __time64_t const* sourceTime
);

Parâmetros

tmDest
Ponteiro para a estrutura de tempo a ser preenchida.

sourceTime
Ponteiro para o tempo armazenado.

Valor de retorno

Zero se for bem-sucedido. O valor de retorno é um código de erro se houver uma falha. Os códigos de erro são definidos em Errno.h. Para obter uma lista desses erros, consulte errno.

Condições de erro

tmDest sourceTime Valor de retorno Valor em tmDest Invoca manipulador de parâmetros inválido
NULL any EINVAL Não modificado Yes
Não NULL (aponta para a memória válida) NULL EINVAL Todos os campos definidos como -1 Yes
Não NULL (aponta para a memória válida) inferior a 0 ou superior a _MAX__TIME64_T EINVAL Todos os campos definidos como -1 Não

As duas primeiras condições de erro invocam o manipulador de parâmetros inválido, conforme descrito em Validação de parâmetros. Se a execução for permitida para continuar, essas funções serão definidas errno como EINVAL e retornarão EINVAL.

Observações

A localtime_s função converte um tempo armazenado como um time_t valor e armazena o resultado em uma estrutura do tipo tm. O time_t valor sourceTime representa os segundos decorridos desde a meia-noite (00:00:00), 1 de janeiro de 1970, UTC. Este valor é frequentemente obtido a partir da time função.

localtime_s Corrige o fuso horário local se o usuário primeiro definir a variável TZde ambiente global . Quando TZ é definido, três outras variáveis de ambiente (_timezone, _daylight, e _tzname) também são definidas automaticamente. Se a TZ variável não estiver definida, localtime_s tente usar as informações de fuso horário especificadas no aplicativo Data/Hora no Painel de Controle. Se essas informações não puderem ser obtidas, PST8PDT, que significa o fuso horário do Pacífico, será usado por padrão. Consulte _tzset para obter uma descrição dessas variáveis. TZ é uma extensão da Microsoft e não faz parte da definição padrão ANSI de localtime.

Observação

O ambiente de destino deve tentar determinar se o horário de verão está em vigor.

_localtime64_s, que usa a estrutura, permite que as __time64_t datas sejam expressas até 23:59:59, 18 de janeiro de 3001, tempo universal coordenado (UTC), enquanto _localtime32_s representa datas até 23:59:59 18 de janeiro de 2038, UTC.

localtime_s é uma função embutida que é avaliada como _localtime64_s, e time_t é equivalente a __time64_t. Se você precisar forçar o compilador a interpretar time_t como o antigo de 32 bits time_t, você pode definir _USE_32BIT_TIME_T, o que faz com localtime_s que avalie para _localtime32_s. Não recomendamos _USE_32BIT_TIME_To , porque seu aplicativo pode falhar após 18 de janeiro de 2038 e não é permitido em plataformas de 64 bits.

Os campos do tipo tm de estrutura armazenam os seguintes valores, cada um dos quais é um intarquivo .

Campo Description
tm_sec Segundos após minuto (0 - 59).
tm_min Minutos após a hora (0 - 59).
tm_hour Horas desde a meia-noite (0 - 23).
tm_mday Dia do mês (1 - 31).
tm_mon Mês (0 - 11; Janeiro = 0).
tm_year Ano (ano corrente menos 1900).
tm_wday Dia da semana (0 - 6; Domingo = 0).
tm_yday Dia do ano (0 - 365; Janeiro 1 = 0).
tm_isdst Valor positivo se o horário de verão estiver em vigor; 0 se o horário de verão não estiver em vigor; valor negativo se o status do horário de verão for desconhecido.

Se a TZ variável de ambiente estiver definida, a biblioteca de tempo de execução C assumirá regras apropriadas aos Estados Unidos para implementar o cálculo do horário de verão (DST).

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, consulte Estado global na CRT.

Observação

Quando você usa o Windows SDK versão 10.0.26100.6901 e Visual Studio 2026 ou posterior juntos, localtime_s não é mais static inline (ligação interna). Em vez disso, é inline (ligação externa).
Para retornar ao comportamento anterior, #define _STATIC_INLINE_UCRT_FUNCTIONS=1 antes de incluir quaisquer cabeçalhos CRT. Por padrão, _STATIC_INLINE_UCRT_FUNCTIONS é definido como 0.
Essa alteração aumenta a conformidade do UCRT com o padrão C++ e melhora a compatibilidade com módulos C++.

Requerimentos

Rotina Cabeçalho C necessário Cabeçalho C++ necessário
localtime_s, _localtime32_s, _localtime64_s <time.h> <ctime> ou <time.h>

Para obter mais informações sobre compatibilidade, consulte Compatibilidade.

Example

// crt_localtime_s.c
// This program uses _time64 to get the current time
// and then uses _localtime64_s() to convert this time to a structure
// representing the local time. The program converts the result
// from a 24-hour clock to a 12-hour clock and determines the
// proper extension (AM or PM).

#include <stdio.h>
#include <string.h>
#include <time.h>

int main( void )
{
    struct tm newtime;
    char am_pm[] = "AM";
    __time64_t long_time;
    char timebuf[26];
    errno_t err;

    // Get time as 64-bit integer.
    _time64( &long_time );
    // Convert to local time.
    err = _localtime64_s( &newtime, &long_time );
    if (err)
    {
        printf("Invalid argument to _localtime64_s.");
        exit(1);
    }
    if( newtime.tm_hour > 12 )        // Set up extension.
        strcpy_s( am_pm, sizeof(am_pm), "PM" );
    if( newtime.tm_hour > 12 )        // Convert from 24-hour
        newtime.tm_hour -= 12;        // to 12-hour clock.
    if( newtime.tm_hour == 0 )        // Set hour to 12 if midnight.
        newtime.tm_hour = 12;

    // Convert to an ASCII representation.
    err = asctime_s(timebuf, 26, &newtime);
    if (err)
    {
        printf("Invalid argument to asctime_s.");
        exit(1);
    }
    printf( "%.19s %s\n", timebuf, am_pm );
}
Fri Apr 25 01:19:27 PM

Consulte também

Gestão do tempo
asctime_s, _wasctime_s
ctime, _ctime32, _ctime64, _wctime, _wctime32, _wctime64
_ftime, _ftime32, _ftime64
gmtime_s, _gmtime32_s, _gmtime64_s
localtime, _localtime32, _localtime64
time, _time32, _time64
_tzset