_mkgmtime, _mkgmtime32, _mkgmtime64
Converte uma hora UTC representada por um tmstruct para uma hora UTC representado por um time_t tipo.
time_t _mkgmtime(
struct tm* timeptr
);
__time32_t _mkgmtime32(
struct tm* timeptr
);
__time64_t _mkgmtime64(
struct tm* timeptr
);
Parâmetros
- timeptr
Um ponteiro para a hora UTC, como um structtm para converter.
Valor de retorno
Uma quantidade do tipo __time32_t ou __time64_t que representa o número de segundos passados desde meia-noite, 1 de janeiro de 1970, no tempo Universal Coordenado (UTC).Se a data está fora do intervalo (consulte a seção comentários) ou a entrada não pode ser interpretada como uma hora válido , o valor retornado é – 1.
Comentários
O _mkgmtime32 e _mkgmtime64 tempo de converter um UTC de funções para um __time32_t ou __time64_t tipo que representa a hora no UTC.Para converter um hora UTC, horário local, use mktime, _mktime32, e _mktime64 em vez disso.
_mkgmtimeé umafunção de embutidoque é avaliada como _mkgmtime64, e time_t é equivalente a __time64_t. Se você precisa forçar o compilador para interpretar time_tcomo o antigo 32-bit time_t, você pode definir _USE_32BIT_TIME_T.Isso não é recomendado porque seu aplicativo pode falhar após 19 de janeiro de 2038 (o intervalo máximo de 32 bits time_t), e não é permitido em todos os em plataformas de 64 bits.
A estrutura de tempo passado será alterado da seguinte maneira, da mesma forma como eles são alterados com o _mktime funções: o tm_wday e tm_yday campos são definidos como novos valores com base nos valores de tm_mday e tm_year.Ao especificar um tm estrutura de tempo, defina a tm_isdsto campo para:
Zero (0) para indicar que a hora 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 que o código da biblioteca c run-time de computação se hora padrão ou o horário de verão está em vigor.
O c run-time biblioteca usa avariável do ambienteTZ para determinar o horário de verão correto. Se TZ não estiver definido, o sistema operacional será consultado para obter comportamento em tempo de verão regionais correto.tm_isdsté um campode obrigatório.Se não definida, seu valor é indefinido e o valor retornado da mktime é imprevisível.
O intervalo da _mkgmtime32 função é de meia-noite, de 1º de janeiro de 1970, UTC para 19 de janeiro, 3: 14: 07 2038, UTC. O intervalo de _mkgmtime64 é de meia-noite, de 1º de janeiro de 1970, UTC a 23: 59: 59, 31 de dezembro de 3000, UTC.Uma data fora do intervalo resulta em um valor retornado de – 1.O intervalo de _mkgmtime depende _USE_32BIT_TIME_T está definido.Se não definido (padrão) o intervalo é de _mkgmtime64; Caso contrário, o intervalo é limitado ao intervalo de 32 bits de _mkgmtime32.
Observe que gmtime e localtime usar um único buffer alocado estaticamente para a conversão.Se você fornecer desse buffer para mkgmtime, o conteúdo anterior é destruído.
Exemplo
// crt_mkgmtime.c
#include <stdio.h>
#include <time.h>
int main()
{
struct tm t1, t2;
time_t now, mytime, gmtime;
char buff[30];
time( & now );
_localtime64_s( &t1, &now );
_gmtime64_s( &t2, &now );
mytime = mktime(&t1);
gmtime = _mkgmtime(&t2);
printf("Seconds since midnight, January 1, 1970\n");
printf("My time: %I64d\nGM time (UTC): %I64d\n\n", mytime, gmtime);
/* Use asctime_s to display these times. */
_localtime64_s( &t1, &mytime );
asctime_s( buff, sizeof(buff), &t1 );
printf( "Local Time: %s\n", buff );
_gmtime64_s( &t2, &gmtime );
asctime_s( buff, sizeof(buff), &t2 );
printf( "Greenwich Mean Time: %s\n", buff );
}
Exemplo de saída
Seconds since midnight, January 1, 1970
My time: 1171588492
GM time (UTC): 1171588492
Local Time: Thu Feb 15 17:14:52 2007
Greenwich Mean Time: Fri Feb 16 01:14:52 2007
O exemplo a seguir mostra como a estrutura de incompleta é preenchido com os valores calculados do dia da semana e o dia do ano.
// crt_mkgmtime2.c
#include <stdio.h>
#include <time.h>
#include <memory.h>
int main()
{
struct tm t1, t2;
time_t gmtime;
char buff[30];
memset(&t1, 0, sizeof(struct tm));
memset(&t2, 0, sizeof(struct tm));
t1.tm_mon = 1;
t1.tm_isdst = 0;
t1.tm_year = 103;
t1.tm_mday = 12;
// The day of the week and year will be incorrect in the output here.
asctime_s( buff, sizeof(buff), &t1);
printf("Before calling _mkgmtime, t1 = %s t.tm_yday = %d\n",
buff, t1.tm_yday );
gmtime = _mkgmtime(&t1);
// The correct day of the week and year were determined.
asctime_s( buff, sizeof(buff), &t1);
printf("After calling _mkgmtime, t1 = %s t.tm_yday = %d\n",
buff, t1.tm_yday );
}
Saída
Before calling _mkgmtime, t1 = Sun Feb 12 00:00:00 2003
t.tm_yday = 0
After calling _mkgmtime, t1 = Wed Feb 12 00:00:00 2003
t.tm_yday = 42
Consulte também
Referência
gmtime_s, _gmtime32_s, _gmtime64_s