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
。 當使用 _mktime32
和 timeptr
如果參考 2038 年 1 月 18 日 23:59:59 之後的日期時,會傳回 -1 轉換為 類型 time_t
。
_mktime64
如果timeptr
參考 23:59:59、3000 年 12 月 31 日 UTC 之後的日期,則會傳回 -1 轉換至類型__time64_t
。
備註
和 _mktime64
_mktime32
函mktime
式會將 所提供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_wday
和 tm_yday
的值設定為適當的值,並設定其他元件,以表示指定的月曆時間,但同時也會強迫這些值在正確範圍內。 在和 決定之前tm_mon
tm_year
,不會設定 的最終值tm_mday
。 當指定 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
、 、 _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