如何正确转换日期时间字符串的utc时间位移?
问题描述:
我在版本4.6.2中使用Qt并尝试使用UTC时间位移信息将自定义日期字符串转换为QDateTime对象。如何正确转换日期时间字符串的utc时间位移?
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时间位移?
答
如果你需要留了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);
有用? https://bugreports.qt.io/browse/QTBUG-11623 – Tarod
交流,感谢您的评论塔罗德!很明显,它是Qt 4.6中的一个Bug,并在Qt 4.7中修复。我意识到我在版本4.6.2中使用Qt。所以我会尝试用更新的Qt版本解决我的问题。 – kbisang
伟大的@kbisang!让我们知道,如果你用不同的Qt版本得到你想要的东西。 – Tarod