如何从日期时间字符串中正确转换utc时间位移?

时间:2017-10-18 08:46:29

标签: c++ qt

我在版本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时间位移?

1 个答案:

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