Compartilhar via


mktime, _mktime32, _mktime64

Converta a hora local para um valor de calendário.

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 horário; consulte asctime.

Valor de retorno

_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 de 1º de janeiro de 1970, ou se o horário do calendário não puder ser representado, _mktime32 retorna –1 convertido para o tipo time_t. Ao usar _mktime32 e se timeptr fizer referência a uma data posterior a 03:14:07 de 19 de janeiro de 2038, UTC (Tempo Universal Coordenado), ele retornará –1 convertido ao tipo time_t.

_mktime64 retornará –1 convertido ao 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 para um valor de hora do calendário time_t. O horário convertido possui 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 são restritos aos seus intervalos normais.

mktime é uma função embutida equivalente a _mktime64, a menos que _USE_32BIT_TIME_T seja definido, nesse caso, ela é 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é 03:14:07 de 19 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ê está no Cairo, Egito, que está duas horas à frente do UTC, duas horas serão primeiramente subtraídas da data especificada em timeptr; isso pode agora deixar a 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 tempo de execução C determinará o comportamento do horário de verão da 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 isso falhar, a biblioteca assume que serão usadas as regras dos Estados Unidos para implantar o cálculo do horário de verão. 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 a asctime, gmtime ou localtime (ou variantes dessas funções), o campo tm_isdst contém o valor correto.

Observe que gmtime e localtime (e _gmtime32, _gmtime64, _localtime32 e _localtime64) usam um buffer único 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 é invocado, como descrito em Validação do parâmetro. Se a execução puder continuar, essas funções retornarão -1 e definirão errno como EINVAL.

Requisitos

Rotina

Cabeçalho necessário

mktime

<time.h>

_mktime32

<time.h>

_mktime64

<time.h>

Para obter informações adicionais sobre compatibilidade, consulte Compatibilidade na Introdução.

Bibliotecas

Todas as versões de bibliotecas de 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" );
}

Exemplo de saída

Current time is Fri Apr 25 13:34:07 2003

In 20 days the time will be Thu May 15 13:34:07 2003

Equivalência do .NET Framework

System::DateTime::DateTime

Consulte também

Referência

Gerenciamento de tempo

asctime, _wasctime

gmtime, _gmtime32, _gmtime64

localtime, _localtime32, _localtime64

_mkgmtime, _mkgmtime32, _mkgmtime64

time, _time32, _time64