_mkgmtime
, , _mkgmtime32
_mkgmtime64
Převede čas UTC reprezentovaný časem struct tm
UTC na čas UTC reprezentovaný typem time_t
.
Syntaxe
time_t _mkgmtime(
struct tm* timeptr
);
__time32_t _mkgmtime32(
struct tm* timeptr
);
__time64_t _mkgmtime64(
struct tm* timeptr
);
Parametry
timeptr
Ukazatel na čas UTC jako struct tm
převod.
Vrácená hodnota
Množství typu __time32_t
nebo __time64_t
představující počet sekund uplynulých od půlnoci, 1. ledna 1970 v koordinovaném univerzálním čase (UTC). Pokud je datum mimo rozsah (viz oddíl Poznámky) nebo nelze vstup interpretovat jako platný čas, návratová hodnota je -1.
Poznámky
_mkgmtime64
Funkce _mkgmtime32
převedou čas UTC na __time32_t
čas nebo __time64_t
typ představující čas v UTC. Chcete-li převést místní čas na čas UTC, použijte mktime
_mktime32
, a _mktime64
místo toho.
_mkgmtime
je vložená funkce, která je vyhodnocena jako _mkgmtime64
, a time_t
je ekvivalentní __time64_t
. Pokud potřebujete vynutit, aby kompilátor interpretoval time_t
jako starý 32bitový time_t
, můžete definovat _USE_32BIT_TIME_T
. Nedoporučujeme to, protože vaše aplikace může selhat po 18. lednu 2038, maximální rozsah 32bitové time_t
verze . Není povolené vůbec na 64bitových platformách.
Předaná časová struktura je změněna následujícím způsobem, stejně jako je změněna _mktime
funkcemi: pole tm_wday
a tm_yday
pole jsou nastaveny na nové hodnoty na základě hodnot a tm_mday
tm_year
. Vzhledem k tomu, že se předpokládá, že čas je UTC, tm_isdst
pole se ignoruje.
Rozsah _mkgmtime32
funkce je od půlnoci, 1. ledna 1970, UTC do 23:59:59 18, 2038, UTC. Rozsah _mkgmtime64
je od půlnoci, 1. ledna 1970, UTC do 23:59:59, 31. prosince 3000, UTC. Výsledkem data mimo rozsah je návratová hodnota -1. Rozsah _mkgmtime
závisí na tom, zda _USE_32BIT_TIME_T
je definován. Pokud není definován, což je výchozí hodnota, rozsah je stejný jako _mkgmtime64
. V opačném případě je rozsah omezen na 32bitový rozsah _mkgmtime32
.
localtime
Pro gmtime
převod použijte společnou statickou vyrovnávací paměť. Pokud tuto vyrovnávací paměť _mkgmtime
zadáte, předchozí obsah se zničí.
Příklady
// 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 );
}
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
Následující příklad ukazuje, jak neúplná struktura je vyplněna _mkgmtime
. Vypočítá hodnoty pro den v týdnu i rok.
// 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 );
}
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
Viz také
Správa času
asctime
, _wasctime
asctime_s
, _wasctime_s
gmtime
, , _gmtime32
_gmtime64
gmtime_s
, , _gmtime32_s
_gmtime64_s
localtime_s
, , _localtime32_s
_localtime64_s
mktime
, , _mktime32
_mktime64
time
, , _time32
_time64