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 日之前引用日期,或者,如果日历时不能表示, _mktime32 返回 –转换的 1 键入 time_t。 在使用 _mktime32 ,并且,如果 timeptr 引用一个日期。 03:14 后面: 一月 07 日 19 日 2038 中,协调世界 (UTC)时 (utc),它将返回 –转换的 1 键入 time_t

,如果 timeptr 引用一个日期。 23:59 后,_mktime64 将返回 –转换的 1 键入 __time64_t : 59, 3000 年十二月 31 日,, UTC。

备注

mktime_mktime32_mktime64 函数所提供的机制 (可能未完成) 点转换为由 timeptr 为规范化的值的完全定义的结构然后将其转换为 time_t 日历时间值。 转换后的时间与值由 时间 函数返回的编码。 timeptr 结构的 tm_wdaytm_yday 元素的初始值,将忽略,且其他组件的初始值不限于其正常大小。

mktime_mktime64等效的内联函数,因此,除非 _USE_32BIT_TIME_T 定义,因此,在其与 _mktime32情况下是等效的。

在对 UTC 的论证后, _mktime32 处理日期午夜, 1970 年一月 1 日,到 03:14: 07, 2038 年一月 19 日。 _mktime64 处理日期午夜, 1970 年一月 1 日到 23:59: 59, 3000 年十二月 31 日,。 这种调整可能会导致这些函数返回 -1 (对 time_t__time32_t__time64_t的转换),即使您指定的日期在范围内。 例如,因此,如果在开罗,埃及,是早于 UTC 的小时,两小时从您在 timeptr指定的日期首先减去;这可能现在将您的日期超出范围。

这些功能可以用于验证和填充 tm 结构。 如果成功,这些功能集 tm_wdaytm_yday 的值,相应的和设置其他元素表示指定的日历时,但是,与其值被强制为正常大小。 tm_mday 的最终值之前,不会设置 tm_montm_year 确定。 当指定 tm 结构时间时,设置 tm_isdst 字段:

  • 指示零 (0) 0) 标准时间有效。

  • 大于 0 的值表示夏时制有效。

  • 值小于具有零 C 运行库代码评估条件时或夏时制是否有效。

C 运行库将确定夏时制时间行为。 TZ 环境变量。 如果 TZ 未设置, Win32 API 调用 GetTimeZoneInformation 用于获取从操作系统的夏时制时间信息。 如果此操作失败,库假定使用实现的夏时制的计算美国的规则。 tm_isdst 是必需字段。 如果未设置,其值是未定义的,并从这些函数的返回值是不可预知的。 如果 timeptr 指向 tm 上返回的结构调用 asctimegmtime,否则这些功能 localtime (或变量), tm_isdst 字段包含正确的值。

请注意 gmtimelocaltime (和 _gmtime32_gmtime64_localtime32_localtime64) 转换为使用唯一缓冲区每个线程。 如果您提供此缓冲区将 mktime_mktime32_mktime64,破坏以前内容。

这些功能验证其参数。 如果 timeptr 是 null 指针,无效参数调用处理程序,如中所 参数验证述。 如果执行允许继续,函数返回 -1 并将 errnoEINVAL

要求

实例

必需的头

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 等效项

系统:: datetime:: datetime

请参见

参考

时间线

asctime, _wasctime

gmtime, _gmtime32, _gmtime64

localtime, _localtime32, _localtime64

_mkgmtime, _mkgmtime32, _mkgmtime64

time, _time32, _time64