Sdílet prostřednictvím


mktime, _mktime32, _mktime64

Převeďte místní čas na hodnotu kalendáře.

Syntaxe

time_t mktime(
   struct tm *timeptr
);
__time32_t _mktime32(
   struct tm *timeptr
);
__time64_t _mktime64(
   struct tm *timeptr
);

Parametry

timeptr
Ukazatel na časovou strukturu; viz .asctime

Vrácená hodnota

_mktime32 vrátí zadaný čas kalendáře kódovaný jako hodnota typu time_t. Pokud timeptr odkazuje na datum před půlnocí, 1. ledna 1970 nebo pokud kalendářní čas nemůže být reprezentován, _mktime32 vrátí hodnotu -1 přetypování na typ time_t. Při použití _mktime32 a pokud timeptr odkazuje na datum po 23:59:59 leden 18, 2038, Koordinovaný univerzální čas (UTC), vrátí -1 přetypování na typ time_t.

_mktime64 vrátí přetypování -1, pokud __time64_ttimeptr odkazuje na datum po 23:59:59, 31. prosince 3000 UTC.

Poznámky

Funkce mktimea _mktime64 funkce převedou zadanou časovou strukturu (pravděpodobně neúplnou) na timeptr plně definovanou strukturu s normalizovanými hodnotami a pak ji převede na hodnotu kalendářního time_t času. _mktime32 Převedený čas má stejné kódování jako hodnoty vrácené time funkcí. Původní hodnoty tm_wday a tm_yday součásti timeptr struktury jsou ignorovány a původní hodnoty ostatních součástí nejsou omezeny na jejich normální rozsahy.

mktime je vložená funkce, která je ekvivalentní _mktime64, pokud _USE_32BIT_TIME_T není definována, v takovém případě je ekvivalentní _mktime32.

Po úpravě utc _mktime32 zpracovává data od půlnoci, 1. ledna 1970 do 23:59:59 18. ledna 2038 UTC. _mktime64 zpracovává data od půlnoci, 1. ledna 1970 do 23:59:59, 31. prosince 3000. Tato úprava může způsobit, že tyto funkce vrátí hodnotu -1 (přetypování na time_t) __time32_t__time64_ti když zadané datum spadá do rozsahu. Pokud jste například v Káhiře, Egyptu, což je před časem UTC dvě hodiny, odečtou se nejdříve dvě hodiny od zadaného data timeptr. Odčítání teď může zadat datum mimo rozsah.

Tyto funkce lze použít k ověření a vyplnění tm struktury. V případě úspěchu tyto funkce nastaví hodnoty a tm_wdaytm_yday podle potřeby a nastaví ostatní komponenty tak, aby představovaly zadaný čas kalendáře, ale s jejich hodnotami vynucenými k normálním rozsahům. Konečná hodnota tm_mday není nastavená, dokud tm_mon nebude určena a tm_year nebude určena. Při zadávání tm času struktury nastavte tm_isdst pole na:

  • Nula (0) označující, že je běžný čas v platnosti.

  • Hodnota větší než 0 značí, že letní čas je v platnosti.

  • Hodnota menší než nula, aby kód knihovny runtime jazyka C počítaly, jestli se používá standardní čas nebo letní čas.

Knihovna runtime jazyka C určí chování letního času z TZ proměnné prostředí. Pokud TZ není nastavené, volání GetTimeZoneInformation rozhraní API Win32 slouží k získání informací o letním čase z operačního systému. Pokud volání selže, knihovna předpokládá, že se použijí pravidla USA pro implementaci výpočtu letního času. tm_isdst je povinné pole. Pokud není nastavená, její hodnota není definována a návratová hodnota z těchto funkcí je nepředvídatelná. Pokud timeptr odkazuje na tm strukturu vrácenou předchozím voláním asctime, gmtimenebo localtime (nebo varianty těchto funkcí), tm_isdst pole obsahuje správnou hodnotu.

Funkce gmtime a localtime (a _gmtime32, _gmtime64, _localtime32a _localtime64) používají pro převod jednu vyrovnávací paměť na vlákno. Pokud tuto vyrovnávací paměť zadáte do mktimenebo _mktime64_mktime32 , předchozí obsah se zničí.

Tyto funkce ověřují svůj parametr. Pokud timeptr je ukazatel null, je vyvolána neplatná obslužná rutina parametru, jak je popsáno v ověření parametru. Pokud je možné pokračovat spuštěním, funkce vrátí hodnotu -1 a nastaví errno se na EINVALhodnotu .

Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.

Požadavky

Rutina Požadovaný hlavičkový soubor
mktime <time.h>
_mktime32 <time.h>
_mktime64 <time.h>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Knihovny

Všechny verze knihoven runtime jazyka C.

Příklad

// 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" );
}

Ukázkový výstup

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

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

Viz také

Správa času
asctime, _wasctime
gmtime, _gmtime32, _gmtime64
localtime, _localtime32, _localtime64
_mkgmtime, _mkgmtime32, _mkgmtime64
time, _time32, _time64