根据标准,mktime
应该执行规范化 - 当您想添加一分半钟时struct tm
,您添加 90 秒tm_sec
并调用mktime
,忽略它的返回值。
我在标准中没有找到的是,即使参数无法表示time_t
(例如将年份设置为 2100),参数是否已标准化。
那么,这段代码安全吗?
struct tm future;
memset(&future, 0, sizeof(future));
future.tm_mon = 1;
future.tm_sec = 90; //I want this to be normalised by mktime
future.tm_year = 200; //but this can cause troubles
mktime(&future);
//future.tm_sec should be 30
//future.tm_min should be 1
//future.tm_year should be still 200