Qt ISODate格式化日期/时间,包括时区

Rob*_*ieE 9 c++ qt qdatetime qdate qtcore

有没有人知道如何将时区包含在QDateTime的ISO字符串表示中?

我应该可以使用以下内容:

qDebug() << QDateTime::currentDateTime().toString(Qt::ISODate);
Run Code Online (Sandbox Code Playgroud)

但这总是以UTC格式出现:

2014-02-24T01:29:00Z
Run Code Online (Sandbox Code Playgroud)

目前,我正在解决这个问题的方法是通过显式设置偏移量来强制TimeSpec为Qt :: offsetFromUtc,这是我最初从QDateTime获得的.

QDateTime now = QDateTime::currentDateTime();
int offset = now.offsetFromUtc();
now.setOffsetFromUtc(offset);
qDebug() << now.toString(Qt::ISODate);
Run Code Online (Sandbox Code Playgroud)

这给出了最初的预期:

2014-02-24T01:29:00+02:00
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何以更清洁的方式做到这一点,还是必须将其记录为错误?

编辑:我正在使用Qt5.2.1

更新:

以下小程序显示了我的意思:

#include <QtCore/QDateTime>
#include <QtCore/QDebug>

int main(int argc, int argv){
    qDebug() << QDateTime::currentDateTime().toString(Qt::ISODate);
    qDebug() << QDateTime::currentDateTime().toTimeSpec(Qt::OffsetFromUTC).toString(Qt::ISODate);

    QDateTime now = QDateTime::currentDateTime();
    int offset = now.offsetFromUtc();
    now.setOffsetFromUtc(offset);
    qDebug() << now.toString(Qt::ISODate);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

生成以下输出:

"2014-02-24T10:20:49" 
"2014-02-24T08:20:49Z" 
"2014-02-24T10:20:49+02:00"
Run Code Online (Sandbox Code Playgroud)

最后一行是预期的那一行.请注意,第二次转换为UTC,这不是想要的.

RDP*_*RDP 6

当我需要时,我使用以下解决方法:

QDateTime::currentDateTime().toOffsetFromUtc(QDateTime::currentDateTime().offsetFromUtc()).toString(Qt::ISODate);
Run Code Online (Sandbox Code Playgroud)

我还没有测试@lappa 是否正在开发新版本。上述解决方法已在 Qt 5.3 上测试


lpa*_*app 5

这在5.2之前并不存在,但它已经整合在那里.看起来你的语法不正确,因为它应该是这样的:

QDateTime::currentDateTime().toTimeSpec(Qt::OffsetFromUTC).toString(Qt::ISODate)
Run Code Online (Sandbox Code Playgroud)

根据相应的bug报告.注意在中间调用toTimeSpec(Qt :: OffsetFromUTC).