C++ ctime mktime() 函数

定义和用法

mktime() 函数从一个 tm 结构体中为日期和时间创建一个时间戳。该结构体所表示的时间被视为处于计算机的本地时区。

mktime() 函数还会通过修正日期溢出并填充 tm_wdaytm_yday 成员来修改 tm 结构体。

mktime() 函数在 <ctime> 头文件中定义。

时间戳通常表示相对于 Unix 纪元(1970 年 1 月 1 日)的秒数,但它取决于库的实现方式,因此更安全的做法是仅将其与专门用于处理时间戳的函数(如 localtime()difftime())一起使用。

mktime() 函数使用 tm 结构体的以下成员来创建时间戳:

  • tm_sec - 分钟内的秒数
  • tm_min - 小时内的分钟数
  • tm_hour - 一天内的小时数(从 0 到 23)
  • tm_mday - 一个月中的天数
  • tm_mon - 月份(从 0 开始,0 表示 1 月,到 11 表示 12 月)
  • tm_year - 自 1900 年以来的年数
  • tm_isdst - 当夏令时生效时为 1,不生效时为 0,-1 表示使用计算机的时区设置

mktime() 函数还会处理日期的溢出和下溢。例如,下面的代码将 4 月 31 日正确地解释为 5 月 1 日。

实例

例子 1

创建一个时间戳并打印其日期和时间:

struct tm date;
time_t timestamp;

date.tm_year = 2023 - 1900; // 自 1900 年以来的年数
date.tm_mon = 12 - 1; // 自 1 月以来的月数
date.tm_mday = 17;
date.tm_hour = 12;
date.tm_min = 30;
date.tm_sec = 1;
date.tm_isdst = -1;

timestamp = mktime(&date);

cout << ctime(&timestamp);

亲自试一试

例子 2

mktime() 函数可以解释溢出的日期:

struct tm date;
time_t timestamp;

date.tm_year = 2024 - 1900; // 自 1900 年以来的年数
date.tm_mon = 4 - 1; // 自 1 月以来的月数
date.tm_mday = 31;
date.tm_hour = 0;
date.tm_min = 0;
date.tm_sec = 0;
date.tm_isdst = -1;

timestamp = mktime(&date);

cout << ctime(&timestamp);

亲自试一试

语法

mktime(struct tm * time);

参数

参数 描述
time 必需。指向 tm 结构体的指针。

技术细节

返回: time_t 类型的时间戳,表示结构体中给定的日期和时间。