我在版本4.6.2中使用Qt,并尝试将带有UTC时间位移信息的自定义日期字符串转换为QDateTime对象。
QString format = "yyyy-MM-ddThh:mm:ss.zzz+hh:mm"
QDateTime dateTime = QDateTime::fromString("2017-10-18T08:30:02.000+01:00", format);
qDebug() << dateTime.toString(format);
输出为空字符串。
如果我在格式字符串和日期字符串中省略时间位移信息,我会按预期得到日期字符串:2017-10-18T08:30:02.000。
根据Qt documentation of QDateTime::fromString,时间位移没有明确的格式占位符。
我也尝试以下
QDateTime dateTime = QDateTime::fromString("2017-10-18T08:30:02.000+01:00", Qt::ISODate); // ISO 8601
qDebug() << dateTime.toString(Qt::ISODate);
但结果是2017-10-18T00:00:00。
那么,如何从日期时间字符串中正确转换utc时间位移?
答案 0 :(得分:1)
如果您需要继续使用Qt 4.6,您可以手动查找位移并添加差异(如果存在):
QString strDate = "2017-10-18T08:30:02.000+01:00";
QStringList tokens = strDate.split('+');
QString format = "yyyy-MM-ddThh:mm:ss.zzz"; // format without displacement
QDateTime dateTime = QDateTime::fromString(tokens[0], format);
if (tokens.count() == 2) { // input has displacement
QString format = "hh:mm";
int msecs = QTime::fromString(tokens[1], format).msecsSinceStartOfDay();
dateTime = dateTime.addMSecs(msecs);
}
qDebug() << dateTime.toString(format);