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(¤t_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(¤t_time);
strftime(buffer,250,"--> %d/%m/%y %H:%M:%S",loctime);