mktime
, _mktime32
, _mktime64
Converta a hora local para um valor de calendário.
Sintaxe
time_t mktime(
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.
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