将QString转换为QDateTime的问题

时间:2013-09-24 17:32:18

标签: regex qt qdatetime qdate

我将QString转换为QDataTime - 对象时遇到问题。

字符串看起来像:"2008:09:23 14:18:03,长度为20。 问题是,如果我删除第一个字符,则输出如下:"008:09:23 14:18:03

这是错的吗? 我可以删除没有数字的所有字符吗?

代码:

        QDateTime date;
        QString d=QString::fromStdString(result.val_string);
        date.fromString(d,"yyyy:MM:dd hh:mm:ss");
        qDebug()<<d;
        qDebug()<<d.length()<<date.toString();

输出:

 "008:09:23 14:18:03
 19 "" 

问候

2 个答案:

答案 0 :(得分:2)

双引号由qDebug打印,它们不包含在QString本身中。但是,您似乎在原始字符串的末尾有一些不可打印的字符,删除了结束"符号。尝试仅将前19个字符复制到QString

    QString d = QString::fromStdString(result.val_string.substr(0, 19));
    date.fromString(d,"yyyy:MM:dd hh:mm:ss");
    qDebug()<<d;
    qDebug()<<d.length()<<date.toString();

编辑 QDateTime.fromString是返回QDateTime对象的静态方法 - 它不会修改对象本身!

QDateTime date;
std::string val_string = "2008:09:23 14:18:03";
QString d = QString::fromStdString(val_string.substr(0, 19));
date = QDateTime::fromString(d,"yyyy:MM:dd HH:mm:ss");
qDebug()<<d;
qDebug()<<d.length()<<date.toString();

答案 1 :(得分:0)

使用qPrintable(string);,它将删除双引号。

日期如何制作字符串不是问题。它是qDebug处理字符串的方式。根据{{​​1}},char *QString不同。

http://qt-project.org/doc/qt-5.0/qtcore/qtglobal.html#qPrintable

http://qt-project.org/doc/qt-5.0/qtcore/qstring.html#toLocal8Bit

http://qt-project.org/doc/qt-5.0/qtcore/qbytearray.html#constData

希望有所帮助。