Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Converta a hora local para um valor de calendário.
Sintaxe
time_t mktime( // See note in remarks section about linkage
struct tm *timeptr
);
__time32_t _mktime32(
struct tm *timeptr
);
__time64_t _mktime64(
struct tm *timeptr
);
Parâmetros
timeptr
Ponteiro para a estrutura de hora, confira asctime.
Valor retornado
_mktime32 retorna o horário do calendário especificado, decodificado como valor do tipo time_t. Se timeptr fizer referência a uma data anterior à meia-noite, 1º de janeiro de 1970, ou se a hora do calendário não puder ser representada, _mktime32 retornará -1 conversão para o tipo time_t. Ao usar _mktime32 e se timeptr fizer referência a uma data posterior a 23:59:59 de 18 de janeiro de 2038, UTC (Tempo Universal Coordenado), ele retornará -1 convertido no tipo time_t.
_mktime64 retornará -1 convertido no tipo __time64_t se timeptr fizer referência a uma data posterior a 23:59:59 de 31 de dezembro de 3000, UTC.
Comentários
As funções mktime, _mktime32 e _mktime64 convertem a estrutura de horário fornecida (possivelmente incompleta) apontada por timeptr em uma estrutura completamente definida com valores normalizados e a converte em um valor temporal de calendário time_t. O horário convertido tem a mesma codificação dos valores retornados pela função time. Os valores originais dos componentes tm_wday e tm_yday da estrutura timeptr são ignorados e os valores originais dos outros componentes não ficam restritos aos seus intervalos normais.
mktime é uma função embutida equivalente a _mktime64, a menos que _USE_32BIT_TIME_T seja definido e, nesse caso, ela será equivalente a _mktime32.
Após um ajuste para UTC, _mktime32 lida com datas a partir da meia-noite de 1º de janeiro de 1970 até 23:59:59 de 18 de janeiro de 2038.
_mktime64 lida com datas a partir da meia-noite de 1º de janeiro de 1970 até 23:59:59 de 31 de dezembro de 3000. Esse ajuste pode fazer com que essas funções retornem -1 (convertido para time_t, __time32_t ou __time64_t) embora a data especificada esteja dentro do intervalo. Por exemplo, se você estiver no Cairo, Egito, que está duas horas à frente do UTC, duas horas serão primeiro subtraídas da data especificada em timeptr; a subtração pode agora colocar sua data fora do intervalo.
Essas funções podem ser usadas para validar e preencher uma estrutura de tm. Se bem-sucedidas, essas funções estabelecem os valores de tm_wday e tm_yday quando adequado e definem os outros componentes para representar o horário do calendário especificado, mas com seus valores impostos pelos intervalos normais. O valor final de tm_mday não é definido até que tm_mon e tm_year sejam determinados. Ao especificar um horário de estrutura tm, defina o campo tm_isdst como:
Zero (0) para indicar que o horário padrão está em vigor.
Um valor maior que 0 para indicar que o horário de verão está em vigor.
Um valor menor que zero para fazer que com o código da biblioteca de tempo de execução C calcule se o horário padrão, ou o horário de verão está em vigor.
A biblioteca de runtime do C determinará o comportamento do horário de verão com base na variável de ambiente TZ. Se TZ não for definido, a chamada à API do Win32 GetTimeZoneInformation será usada para obter as informações do horário de verão do sistema operacional. Se a chamada falhar, a biblioteca pressupõe que as regras dos Estados Unidos para implementar o cálculo do horário de verão são usadas.
tm_isdst é um campo obrigatório. Se não definidas, seu valor é indefinido e o valor retornado dessas funções é imprevisível. Se timeptr apontar para uma estrutura tm retornada por uma chamada anterior para asctime, gmtime ou localtime (ou variantes dessas funções), o campo tm_isdst conterá o valor correto.
As gmtime funções and localtime (e _gmtime32, _gmtime64, _localtime32, e _localtime64) usam um único buffer por thread para a conversão. Se esse buffer for fornecido a mktime, _mktime32 ou _mktime64, os conteúdos anteriores serão destruídos.
Essas funções validam seus parâmetros. Se timeptr for um ponteiro nulo, o manipulador de parâmetro inválido será chamado, conforme descrito em Validação de parâmetro. Se a execução puder continuar, essas funções retornarão -1 e definirão errno como EINVAL.
Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.
Observação
Quando você usa o SDK do Windows versão 10.0.26100.6901 e o Visual Studio 2026 ou posterior juntos, mktime não é mais static inline (vinculação interna). Em vez disso, é inline (vinculaçã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++.
Requisitos
| Rotina | Cabeçalho necessário |
|---|---|
mktime |
<time.h> |
_mktime32 |
<time.h> |
_mktime64 |
<time.h> |
Para obter informações sobre compatibilidade, consulte Compatibilidade.
Bibliotecas
Todas as versões das bibliotecas em tempo de execução C.
Exemplo
// crt_mktime.c
/* The example takes a number of days
* as input and returns the time, the current
* date, and the specified number of days.
*/
#include <time.h>
#include <stdio.h>
int main( void )
{
struct tm when;
__time64_t now, result;
int days;
char buff[80];
time( &now );
_localtime64_s( &when, &now );
asctime_s( buff, sizeof(buff), &when );
printf( "Current time is %s\n", buff );
days = 20;
when.tm_mday = when.tm_mday + days;
if( (result = mktime( &when )) != (time_t)-1 ) {
asctime_s( buff, sizeof(buff), &when );
printf( "In %d days the time will be %s\n", days, buff );
} else
perror( "mktime failed" );
}
Saída de exemplo
Current time is Fri Apr 25 13:34:07 2003
In 20 days the time will be Thu May 15 13:34:07 2003
Confira também
Gerenciamento de tempo
asctime, _wasctime
gmtime, , _gmtime32_gmtime64
localtime, , _localtime32_localtime64
_mkgmtime, , _mkgmtime32_mkgmtime64
time, , _time32_time64