我有一些代码,我将QDateTime写入文件......
someQDateTime.toUTC().toString(Qt::ISODate)
当我使用QDateTime::fromString()
读回来时,我将时间解释为处于系统的时区。我在写出来时可以手动将“Z”附加到字符串,或者在我读完之后使用setTimeSpec()
,然后一切都很好,但这是首选这样做的方式?当timeSpec是UTC时,toString()不应该写出Z吗?
答案 0 :(得分:3)
嗯,至少根据ISO 8601(第4.2.4节,pdf here),需要Z
来区分UTC和当地时间。似乎QDateTime::toString()
不遵循此建议,而QDateTime::fromString()
知道它。 ISO 8601也包含4.3.2节中的这个注释(其中[T]是时区指示符,即Z):
“通过信息交换中的合作伙伴的共同协议,可以省略字符[T] 不存在将日期和时间表示与此处定义的其他人混淆的风险的应用程序 国际标准。“
你总是可以提交一份错误报告(https://bugreports.qt.io/)来告诉Qt人这个小的不一致,看看他们对此有什么看法。
答案 1 :(得分:0)
Qt bug 9698与QDateTime::toString(Qt::ISODate)
的行为有关。在那里报告了时区指示符的遗漏。随意为错误投票。