Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;mktime返回随机日期_C++_C_Datetime_Time - Fatal编程技术网

C++ C++;mktime返回随机日期

C++ C++;mktime返回随机日期,c++,c,datetime,time,C++,C,Datetime,Time,我试图将日期字符串转换为时间,但mktime()返回的似乎是随机的日期: string datetime = "2014-12-10 10:30"; struct tm tmInfo; strptime(datetime.c_str(), "%Y-%m-%d %H:%M", &tmInfo); tmInfo.tm_isdst = 0; time_t eventTime = mktime(&tmInfo); 事件时间范围从20世纪70年代到20世纪30年代。tmInfo结构包含正

我试图将日期字符串转换为
时间
,但mktime()返回的似乎是随机的日期:

string datetime = "2014-12-10 10:30";
struct tm tmInfo;
strptime(datetime.c_str(), "%Y-%m-%d %H:%M", &tmInfo);
tmInfo.tm_isdst = 0;
time_t eventTime = mktime(&tmInfo);

事件时间范围从20世纪70年代到20世纪30年代。tmInfo结构包含正确的日期,因此错误必须发生在mktime()中。有什么问题吗?

在调用
struct tm
实例之前,您需要正确地对所有其他字段进行零初始化,因为它不一定初始化每个字段。从:

未指定使用同一tm结构多次调用strptime()是否会更新结构的当前内容或覆盖结构的所有内容。一致性应用程序应使用格式和所需的所有数据对strtime()进行一次调用,以完全指定转换的日期和时间

例如,这应足以:

struct tm tmInfo = {0};

您必须事先将结构初始化为0,或者输入秒数:

string datetime = "2014-12-10 10:30";
struct tm tmInfo = { 0 };
strptime(datetime.c_str(), "%Y-%m-%d %H:%M", &tmInfo);


如果您想要当前系统时间的格式,下面的代码将完成这项工作

 time_t current_time;
 struct tm *loctime;

 memset(buffer,0,strlen(buffer));
 current_time = time(NULL);
 loctime = localtime(&current_time);
 strftime(buffer,250,"--> %d/%m/%y  %H:%M:%S",loctime);

似乎是
eventTime
显示为
1418203800
,在正确的范围内。预先将tmInfo设置为{0}有效,谢谢!哦,我的上帝!最后我找到了这个答案,非常感谢!我也遇到了同样的问题!太头痛了…预先将tmInfo设置为{0}有效,谢谢!因为这个解释,我接受了你的回答。
 time_t current_time;
 struct tm *loctime;

 memset(buffer,0,strlen(buffer));
 current_time = time(NULL);
 loctime = localtime(&current_time);
 strftime(buffer,250,"--> %d/%m/%y  %H:%M:%S",loctime);