使用strptime转换字符串到时间但得到垃圾

时间:2013-10-22 17:40:24

标签: c++ strptime

我在c ++中使用strptime()函数时遇到问题。

我在stackoverflow中找到了一段代码,如下所示,我想在struct tm上存储字符串时间信息。虽然我应该获得关于我的tm tm_year变量的年份信息,但我总是得到垃圾。有人帮我吗?提前谢谢。

    string  s = dtime;
    struct tm timeDate;
    memset(&timeDate,0,sizeof(struct tm));
    strptime(s.c_str(),"%Y-%m-%d %H:%M", &timeDate);
    cout<<timeDate.tm_year<<endl; // in the example below it gives me 113
    cout<<timeDate.tm_min<<endl; // it returns garbage 
**string s will be like "2013-12-04 15:03"**

1 个答案:

答案 0 :(得分:11)

cout<<timeDate.tm_year<<endl; // in the example below it gives me 113

它应该会让你的价值降低1900,所以如果它给你113,则表示年份为2013。月份也会减少1,即如果它给你1,则实际上是2月。只需添加以下值:

#include <iostream>
#include <sstream>
#include <ctime>

int main() {
    struct tm tm;
    std::string s("2013-12-04 15:03");
    if (strptime(s.c_str(), "%Y-%m-%d %H:%M", &tm)) {
        int d = tm.tm_mday,
            m = tm.tm_mon + 1,
            y = tm.tm_year + 1900;
        std::cout << y << "-" << m << "-" << d << " "
                  << tm.tm_hour << ":" << tm.tm_min;
    }
}

输出2013-12-4 15:3