共用方式為


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 月 19 日 03:14:07 國際標準時間 (UTC) 之後,則會傳回 –1 並轉換為類型 time_t

timeptr 參考的日期是在 3000 年 12 月 31 日 23:59:59 (UTC) 之後,_mktime64 會傳回 –1 並轉換為類型 __time64_t

備註

mktime_mktime32_mktime64 函式會將 timeptr 所指向的指定時間結構 (可能不完整),轉換為具有標準化值的完整定義結構,然後將該結構轉換為 time_t 月曆時間值。 轉換後的時間和 time 函式傳回的值具有相同的編碼。 會忽略 timeptr 結構中 tm_wdaytm_yday 元件的原始值,且不會限制其他元件的原始值在其正確範圍中。

mktime 是相當於 _mktime64 的內嵌函式,但若有定義 _USE_32BIT_TIME_T 時,則是相當於 _mktime32

調整為 UTC 之後,_mktime32 會處理從 1970 年 1 月 1 日到 2038 年 1 月 19 日 03:14:07 之間的日期。 _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 指向之前呼叫 asctimegmtimelocaltime (或是這些函式的變數) 所傳回的 tm 結構,則 tm_isdst 欄位包含正確的值。

請注意,gmtimelocaltime (和 _gmtime32_gmtime64_localtime32_localtime64) 會針對轉換,為每個執行緒使用單一緩衝區。 若您將此緩衝區提供給 mktime_mktime32_mktime64,則會終結之前的內容。

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

需求

常式

必要的標頭

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

.NET Framework 對等用法

System::DateTime::DateTime

請參閱

參考

時間管理

asctime、_wasctime

gmtime、_gmtime32、_gmtime64

localtime、_localtime32、_localtime64

_mkgmtime、_mkgmtime32、_mkgmtime64

time、_time32、_time64