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