將當地時間轉換成月曆值。
語法
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
);
參數
timeptr
時間結構的指標;請參閱 asctime。
傳回值
_mktime32 傳回編碼為 型別 time_t值的指定行事歷時間。 如果 timeptr 參考 1970 年 1 月 1 日午夜前的日期,或無法表示行事曆時間, _mktime32 則會傳回 -1 轉換為 類型 time_t。 當使用 _mktime32 和 timeptr 如果參考 2038 年 1 月 18 日 23:59:59 之後的日期時,會傳回 -1 轉換為 類型 time_t。
_mktime64如果__time64_t參考 23:59:59、3000 年 12 月 31 日 UTC 之後的日期,則會傳回 -1 轉換至類型timeptr。
備註
和 mktime_mktime32 函_mktime64式會將 所提供timeptr的時間結構(可能不完整)轉換成具有正規化值的完整定義結構,然後將它time_t轉換成行事歷時間值。 轉換時間的編碼方式與函式所 time 傳回的值相同。 會忽略 結構的和 tm_wday 元件tm_yday的原始值timeptr,而其他元件的原始值不限於其一般範圍。
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_wday 和 tm_yday 的值設定為適當的值,並設定其他元件,以表示指定的月曆時間,但同時也會強迫這些值在正確範圍內。 在和 決定之前tm_mdaytm_mon,不會設定 的最終值tm_year。 當指定 tm 結構時間時,請將 tm_isdst 欄位設定為:
零 (0),以指出標準時間已生效。
大於 0 的值,以指出日光節約時間已生效。
小於 0 的值,使 C 執行階段程式庫程式碼計算標準時間或日光節約時間是否生效。
C 運行時間連結庫會從 TZ 環境變數判斷日光節約時間行為。 如果未 TZ 設定,則會使用 Win32 API 呼叫 GetTimeZoneInformation 從作業系統取得日光節約時間資訊。 如果呼叫失敗,連結庫會假設使用 美國 規則來實作日光節約時間的計算。
tm_isdst 是必要的欄位。 若無設定,該值會是未定義,而且這些函式的傳回值會無法預期。 如果 timeptr 指向 tm 先前呼叫 asctime、 gmtime或 localtime (或這些函式的變體) 所傳回的結構,欄位 tm_isdst 會包含正確的值。
gmtime和 localtime (和 _gmtime32、 、 _gmtime64_localtime32和 _localtime64) 函式會針對轉換使用每個線程的單一緩衝區。 若您將此緩衝區提供給 mktime、_mktime32 或 _mktime64,則會終結之前的內容。
這些函式會驗證它們的參數。 如果 timeptr 為 null 指標,則會叫用無效的參數處理常式,如參數驗證中所述。 若允許繼續執行,函式會傳回 -1,並將 errno 設為 EINVAL。
根據預設,此函式的全域狀態會限定於應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。
備註
當您同時使用 Windows SDK 10.0.26100.6901 版和 Visual Studio 2026 或更新版本時, mktime 不再 static inline 是 (內部連結)。 相反,它是 inline (外部連結)。
若要在包含任何 CRT 標頭之前, #define _STATIC_INLINE_UCRT_FUNCTIONS=1 先回到先前的行為。 預設會將 _STATIC_INLINE_UCRT_FUNCTIONS 設定為 0。
這項變更可增加 UCRT 與 C++ 標準的一致性,並改善與 C++ 模組的相容性。
需求
| 常式 | 必要的標頭 |
|---|---|
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