Partilhar via


mktime, _mktime32, _mktime64

Converta a hora local num 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 do tempo; veja asctime.

Valor de retorno

_mktime32 Retorna a hora do calendário especificada codificada como um 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 após 23:59:59 18 de janeiro de 2038, Tempo Universal Coordenado (UTC), ele retornará -1 cast para digitar time_t.

_mktime64 retornará -1 cast para digitar __time64_t se timeptr fizer referência a uma data após 23:59:59, 31 de dezembro de 3000, UTC.

Observações

As mktimefunções , e _mktime64 convertem a estrutura de tempo fornecida (possivelmente incompleta) apontada por timeptr em uma estrutura totalmente definida com valores normalizados e, _mktime32 em seguida, converte-a em um valor de time_t tempo de calendário. O tempo convertido tem a mesma codificação que os valores retornados time pela função. Os valores originais dos tm_wday e componentes da timeptr estrutura são ignorados, e os valores originais dos outros componentes não se restringem tm_yday aos seus intervalos normais.

mktime é uma função embutida que é equivalente a , a _mktime64menos _USE_32BIT_TIME_T que seja definida, caso em que é equivalente a _mktime32.

Após um ajuste no UTC, _mktime32 manipula datas da meia-noite, 1 de janeiro de 1970, às 23:59:59 de 18 de janeiro de 2038, UTC. _mktime64 datas da meia-noite, 1 de janeiro de 1970 às 23:59:59, 31 de dezembro de 3000. Esse ajuste pode fazer com que essas funções retornem -1 (transmitir para time_t, __time32_t ou __time64_t) mesmo que 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 a sua data fora do intervalo.

Estas funções podem ser utilizadas para validar e preencher uma tm estrutura. Se bem-sucedidas, essas funções definem os valores de e tm_yday conforme apropriado e definem os outros componentes para representar o tempo de tm_wday calendário especificado, mas com seus valores forçados para os intervalos normais. O valor final de tm_mday não é definido até tm_mon e tm_year são determinados. Ao especificar um tempo de tm estrutura, defina o tm_isdst campo para:

  • Zero (0) para indicar que a hora legal 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 que o código da biblioteca de tempo de execução C calcule se a hora 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 a partir da TZ variável de ambiente. Se TZ não estiver definida, a chamada GetTimeZoneInformation da API do Win32 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 estiver definido, seu valor será indefinido e o valor de retorno dessas funções será imprevisível. Se timeptr apontar para uma tm estrutura retornada por uma chamada anterior para asctime, gmtimeou localtime (ou variantes dessas funções), o tm_isdst campo contém o valor correto.

As gmtime funções e localtime (e _gmtime32, _gmtime64, _localtime32e _localtime64) usam um único buffer por thread para a conversão. Se você fornecer esse buffer para mktime, _mktime32 ou _mktime64, o conteúdo anterior será destruído.

Estas funções validam o seu parâmetro. Se timeptr for um ponteiro nulo, o manipulador de parâmetros inválido será invocado, conforme descrito em Validação de parâmetro. Se a execução for permitida para continuar, as funções retornarão -1 e definidas 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.

Observação

Quando você usa o Windows SDK versão 10.0.26100.6901 e Visual Studio 2026 ou posterior juntos, mktime não é mais static inline (ligação interna). Em vez disso, é inline (ligaçã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++.

Requerimentos

Rotina Cabeçalho obrigatório
mktime <time.h>
_mktime32 <time.h>
_mktime64 <time.h>

Para obter mais informações sobre compatibilidade, consulte Compatibilidade.

Libraries

Todas as versões das bibliotecas de tempo de execução C.

Example

// 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 da amostra

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

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

Consulte também

Gestão do tempo
asctime, _wasctime
gmtime, _gmtime32, _gmtime64
localtime, _localtime32, _localtime64
_mkgmtime, _mkgmtime32, _mkgmtime64
time, _time32, _time64