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,这不是想要的.
当我需要时,我使用以下解决方法:
QDateTime::currentDateTime().toOffsetFromUtc(QDateTime::currentDateTime().offsetFromUtc()).toString(Qt::ISODate);
Run Code Online (Sandbox Code Playgroud)
我还没有测试@lappa 是否正在开发新版本。上述解决方法已在 Qt 5.3 上测试
这在5.2之前并不存在,但它已经整合在那里.看起来你的语法不正确,因为它应该是这样的:
QDateTime::currentDateTime().toTimeSpec(Qt::OffsetFromUTC).toString(Qt::ISODate)
Run Code Online (Sandbox Code Playgroud)
根据相应的bug报告.注意在中间调用toTimeSpec(Qt :: OffsetFromUTC).