Partilhar via


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