C ++ mktime返回随机日期

我正在尝试将日期字符串转换为time_t ,但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); 

eventTime的范围从20世纪70年代到2030年代。 tmInfo结构保存正确的日期,因此必须在mktime()中发生错误。 什么出错的想法?

在调用strptime()之前,您需要正确地初始化struct tm实例的所有其他字段,因为它不一定初始化每个字段。 来自strptime() POSIX规范 :

未指定使用相同tm结构对strptime()的多次调用是更新结构的当前内容还是覆盖结构的所有内容。 合规应用程序应该使用格式和strptime()一次调用,以完全指定转换的日期和时间。

例如,这应该足够了:

 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); 

要么

 string datetime = "2014-12-10 10:30:00"; struct tm tmInfo; strptime(datetime.c_str(), "%Y-%m-%d %H:%M:%S", &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);