std::mktime

来自cppreference.com
< cpp‎ | chrono‎ | c
 
 
 
 
在标头 <ctime> 定义
std::time_t mktime(std::tm* time );

转换本地日历时间为从纪元起的时间,作为 std::time_t 对象。忽略 time->tm_wdaytime->tm_yday。容许 time 中的值在其正常范围外。

time->tm_isdst 的负值会导致 mktime 尝试确定在指定时间夏时令是否有效。

若转换成功,则 time 对象会被修改。更新 time 的所有字段为符合其正确范围的值。用其他字段的可用信息重新计算 time->tm_wdaytime->tm_yday

目录

[编辑]参数

time - 指向 std::tm 对象的指针,它指定要转换的本地日历时间

[编辑]返回值

成功时为表示从纪元开始时间的 std::time_t 对象,若 time 不能表示成 std::time_t 对象则返回 -1(POSIX 亦要求此情况下存储 EOVERFLOWerrno 中)。

[编辑]注解

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

[编辑]参阅

转换纪元起时间为以本地时间表示的日历时间
(函数)[编辑]
mktime 的 C 文档
close