std::mktime
来自cppreference.com
在标头 <ctime> 定义
|
||
std::time_t mktime( std::tm* time ); |
||
转换本地日历时间为从纪元起的时间,作为 std::time_t 对象。忽略 time->tm_wday 与 time->tm_yday。容许 time 中的值在其正常范围外。
time->tm_isdst 的负值会导致 mktime
尝试确定在指定时间夏时令是否有效。
若转换成功,则 time 对象会被修改。更新 time 的所有字段为符合其正确范围的值。用其他字段的可用信息重新计算 time->tm_wday 与 time->tm_yday。
参数
time | - | 指向 std::tm 对象的指针,它指定要转换的本地日历时间 |
返回值
成功时为表示从纪元开始时间的 std::time_t 对象,若 time 不能表示成 std::time_t 对象则返回 -1(POSIX 亦要求此情况下存储 EOVERFLOW
于 errno 中)。
注解
若 std::tm 对象是从 std::get_time 或 POSIX strptime
获得的,则 tm_isdst
的值不确定,而且需要在调用 mktime
前明确设置。
示例
显示创建一个本地时间。
运行此代码
#include <ctime> #include <iomanip> #include <iostream> #include <sstream> int main() { setenv("TZ", "/usr/share/zoneinfo/America/Los_Angeles", 1); // POSIX 专有 std::tm tm{}; // 零初始化 tm.tm_year = 2020 - 1900; // 2020 tm.tm_mon = 2 - 1; // 二月 tm.tm_mday = 15; // 15日 tm.tm_hour = 10; tm.tm_min = 15; tm.tm_isdst = 0; // 无夏令时 std::time_t t = std::mktime(&tm); std::tm local = *std::localtime(&t); std::cout << "local: " << std::put_time(&local, "%c %Z") << '\n'; }
可能的输出:
local: Sat Feb 15 10:15:00 2020 PST
参阅
转换纪元起时间为以本地时间表示的日历时间 (函数) |