共用方式為


mktime、 、 _mktime32_mktime64

將當地時間轉換成月曆值。

語法

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

參數

timeptr
時間結構的指標;請參閱 asctime

傳回值

_mktime32 傳回編碼為 型別 time_t值的指定行事歷時間。 如果 timeptr 參考 1970 年 1 月 1 日午夜前的日期,或無法表示行事曆時間, _mktime32 則會傳回 -1 轉換為 類型 time_t。 當使用 _mktime32timeptr 如果參考 2038 年 1 月 18 日 23:59:59 之後的日期時,會傳回 -1 轉換為 類型 time_t

_mktime64如果timeptr參考 23:59:59、3000 年 12 月 31 日 UTC 之後的日期,則會傳回 -1 轉換至類型__time64_t

備註

_mktime64 _mktime32mktime式會將 所提供timeptr的時間結構(可能不完整)轉換成具有正規化值的完整定義結構,然後將它time_t轉換成行事歷時間值。 轉換時間的編碼方式與函式所 time 傳回的值相同。 會忽略 結構的和 tm_yday 元件timeptr的原始值tm_wday,而其他元件的原始值不限於其一般範圍。

mktime 是相當於 _mktime64的內嵌函式,除非 _USE_32BIT_TIME_T 已定義,否則它相當於 _mktime32

調整為 UTC 之後,_mktime32 會處理從 1970 年 1 月 1 日午夜到 2038 年 1 月 18 日 23:59:59 (UTC) 之間的日期。 _mktime64 會處理從 1970 年 1 月 1 日到 3000 年 12 月 31 日 23:59:59 之間的日期。 即使您指定的日期是在範圍之內,此調整也可能會使這些函式傳回 -1 (轉換類型為 time_t__time32_t__time64_t)。 例如,如果您位於埃及開羅,這是UTC前兩小時,則會先從您指定的 timeptr日期減去兩個小時;減法現在可能會將您的日期超出範圍。

這些函式可用來驗證並填入 tm 結構。 若成功,這些函式會將 tm_wdaytm_yday 的值設定為適當的值,並設定其他元件,以表示指定的月曆時間,但同時也會強迫這些值在正確範圍內。 在和 決定之前tm_montm_year,不會設定 的最終值tm_mday。 當指定 tm 結構時間時,請將 tm_isdst 欄位設定為:

  • 零 (0),以指出標準時間已生效。

  • 大於 0 的值,以指出日光節約時間已生效。

  • 小於 0 的值,使 C 執行階段程式庫程式碼計算標準時間或日光節約時間是否生效。

C 運行時間連結庫會從 TZ 環境變數判斷日光節約時間行為。 如果未 TZ 設定,則會使用 Win32 API 呼叫 GetTimeZoneInformation 從作業系統取得日光節約時間資訊。 如果呼叫失敗,連結庫會假設使用 美國 規則來實作日光節約時間的計算。 tm_isdst 是必要的欄位。 若無設定,該值會是未定義,而且這些函式的傳回值會無法預期。 如果 timeptr 指向 tm 先前呼叫 asctimegmtimelocaltime (或這些函式的變體) 所傳回的結構,欄位 tm_isdst 會包含正確的值。

gmtimelocaltime (和 _gmtime32、 、 _localtime32_gmtime64_localtime64) 函式會針對轉換使用每個線程的單一緩衝區。 若您將此緩衝區提供給 mktime_mktime32_mktime64,則會終結之前的內容。

這些函式會驗證它們的參數。 如果 timeptr 為 null 指標,則會叫用無效的參數處理常式,如參數驗證中所述。 若允許繼續執行,函式會傳回 -1,並將 errno 設為 EINVAL

根據預設,此函式的全域狀態會限定於應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態

需求

常式 必要的標頭
mktime <time.h>
_mktime32 <time.h>
_mktime64 <time.h>

如需相容性詳細資訊,請參閱相容性

程式庫

所有版本的 C 執行階段程式庫

範例

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

範例輸出

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

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

另請參閱

時間管理
asctime, _wasctime
gmtime、 、 _gmtime32_gmtime64
localtime、 、 _localtime32_localtime64
_mkgmtime、 、 _mkgmtime32_mkgmtime64
time、 、 _time32_time64