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
Consulte também
Referência
localtime, _localtime32, _localtime64