Dela via


mktime, _mktime32_mktime64

Konvertera den lokala tiden till ett kalendervärde.

Syntax

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
);

Parameterar

timeptr
Pekare till tidsstruktur; se asctime.

Returvärde

_mktime32 returnerar den angivna kalendertiden som kodas som ett värde av typen time_t. Om timeptr refererar till ett datum före midnatt, den 1 januari 1970, eller om kalendertiden inte kan representeras, _mktime32 returnerar -1 cast för att skriva time_t. När du använder _mktime32 och om timeptr refererar till ett datum efter 23:59:59 januari 18, 2038, Coordinated Universal Time (UTC), returneras -1 cast för att skriva time_t.

_mktime64 returnerar -1 cast för att skriva __time64_t om timeptr refererar till ett datum efter 23:59:59, 31 december 3000, UTC.

Anmärkningar

Funktionerna mktime, _mktime32 och _mktime64 konverterar den angivna tidsstrukturen (eventuellt ofullständig) som pekas på av timeptr till en fullständigt definierad struktur med normaliserade värden och konverterar den sedan till ett time_t kalendertidsvärde. Den konverterade tiden har samma kodning som de värden som returneras av time funktionen. De ursprungliga värdena för tm_wdaytm_yday och komponenterna i timeptr strukturen ignoreras och de ursprungliga värdena för de andra komponenterna är inte begränsade till deras normala intervall.

mktime är en infogad funktion som motsvarar _mktime64, såvida den inte _USE_32BIT_TIME_T har definierats, i vilket fall den motsvarar _mktime32.

Efter en justering av UTC, _mktime32 hanterar datum från midnatt, 1 januari 1970, till 23:59:59 Januari 18, 2038, UTC. _mktime64 hanterar datum från midnatt, 1 januari 1970 till 23:59:59, 31 december 3000. Den här justeringen kan leda till att dessa funktioner returnerar -1 (gjuten till time_t, __time32_t eller __time64_t) även om det datum du anger ligger inom intervallet. Om du till exempel befinner dig i Kairo, Egypten, som ligger två timmar före UTC, subtraheras två timmar först från det datum som du anger i timeptr. Subtraktionen kan nu sätta ditt datum inom intervallet.

Dessa funktioner kan användas för att verifiera och fylla i en tm struktur. Om det lyckas anger dessa funktioner värdena tm_wday för och tm_yday efter behov och anger att de andra komponenterna ska representera den angivna kalendertiden, men med deras värden tvingade till de normala intervallen. Det slutliga värdet för tm_mday anges inte förrän tm_mon och tm_year bestäms. När du anger en tm strukturtid anger du fältet tm_isdst till:

  • Noll (0) för att indikera att standardtiden är i kraft.

  • Ett värde som är större än 0 för att indikera att sommartid är i kraft.

  • Ett värde som är mindre än noll för att ha C-körningsbibliotekets kodberäkning oavsett om standardtid eller sommartid gäller.

C-körningsbiblioteket avgör beteendet för sommartid från TZ miljövariabeln. Om TZ inte har angetts används Win32 API-anropet GetTimeZoneInformation för att hämta information om sommartid från operativsystemet. Om anropet misslyckas förutsätter biblioteket att USA:s regler för att implementera beräkningen av sommartid används. tm_isdst är ett obligatoriskt fält. Om det inte anges är dess värde odefinierat och returvärdet från dessa funktioner är oförutsägbart. Om timeptr pekar på en tm struktur som returneras av ett tidigare anrop till asctime, gmtimeeller localtime (eller varianter av dessa funktioner) tm_isdst innehåller fältet rätt värde.

Funktionerna gmtime och localtime (och _gmtime32, _gmtime64_localtime32, och _localtime64) använder en enda buffert per tråd för konverteringen. Om du anger bufferten till mktime, _mktime32 eller _mktime64, förstörs det tidigare innehållet.

Dessa funktioner verifierar parametern. Om timeptr är en null-pekare anropas den ogiltiga parameterhanteraren enligt beskrivningen i Parameterverifiering. Om körningen tillåts fortsätta returnerar funktionerna -1 och är inställda errnoEINVAL.

Som standard är den här funktionens globala tillstånd begränsat till programmet. Information om hur du ändrar det här beteendet finns i Globalt tillstånd i CRT.

Anmärkning

När du använder Windows SDK version 10.0.26100.6901 och Visual Studio 2026 eller senare tillsammans, mktime är inte längre static inline (intern länkning). I stället är inline det (extern länkning).
För att återgå till det tidigare beteendet, #define _STATIC_INLINE_UCRT_FUNCTIONS=1 innan du inkluderar några CRT-huvuden. Som standard _STATIC_INLINE_UCRT_FUNCTIONS är värdet 0.
Den här ändringen ökar UCRT-överensstämmelsen med C++-standarden och förbättrar kompatibiliteten med C++-moduler.

Kravspecifikation

Rutin Obligatoriskt huvud
mktime <time.h>
_mktime32 <time.h>
_mktime64 <time.h>

Mer kompatibilitetsinformation finns i Kompatibilitet.

Libraries

Alla versioner av C-körningsbiblioteken.

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

Exempelresultat

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

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

Se även

Tidshantering
asctime, _wasctime
gmtime, , _gmtime32_gmtime64
localtime, , _localtime32_localtime64
_mkgmtime, , _mkgmtime32_mkgmtime64
time, , _time32_time64