Compartilhar 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.

Retornar valor

_mktime32 retorna o horário do calendário especificado, decodificado como valor do tipo time_t. Se timeptr fizer referência a uma data antes da meia-noite, 1º de janeiro de 1970, ou se a hora do calendário não puder ser representada, _mktime32 retornará -1 cast para digitar 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 antes do UTC, duas horas serão primeiro subtraídas da data especificada em timeptr, a subtração agora pode 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 assume 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 e (e , , _localtime32_gmtime64e _localtime64localtime_gmtime32) 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âmetros 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, consulte Estado global na 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