以Qt'处理UTC/本地时间的首选方式;什么时候?

以Qt'处理UTC/本地时间的首选方式;什么时候?,qt,datetime,qdatetime,Qt,Datetime,Qdatetime,我有一些代码,我写一个QDateTime到一个文件 someQDateTime.toUTC().toString(Qt::ISODate) 当我使用QDateTime::fromString()读回它时,我得到的时间被解释为在系统的时区中。我可以在写字符串时手动将“Z”附加到字符串中,或者在阅读后使用setTimeSpec(),然后一切都很好,但这是首选的方法吗?难道toString()不应该知道在timeSpec为UTC时写一个Z吗?至少根据ISO 8601(第4.2.4节),需要一个Z来区

我有一些代码,我写一个QDateTime到一个文件

someQDateTime.toUTC().toString(Qt::ISODate)

当我使用
QDateTime::fromString()
读回它时,我得到的时间被解释为在系统的时区中。我可以在写字符串时手动将“Z”附加到字符串中,或者在阅读后使用
setTimeSpec()
,然后一切都很好,但这是首选的方法吗?难道toString()不应该知道在timeSpec为UTC时写一个Z吗?

至少根据ISO 8601(第4.2.4节),需要一个
Z来区分UTC和本地时间。似乎
QDateTime::toString()
没有遵循此建议,而
QDateTime::fromString()
知道这一点。ISO 8601还包含第4.3.2节中的注释(其中[T]是时区指示器,即Z):

“经信息交换合作伙伴双方同意,可在信息交换中省略[T]字符 不存在将日期和时间表示形式与本文档中定义的其他表示形式混淆的风险的应用程序 国际标准。”


您可以随时提交一份bug报告()来告诉Qt人员这个小的不一致性,并看看他们对此有什么看法。

是关于
QDateTime::toString(Qt::ISODate)
的行为。此处报告了时区指示符的遗漏。请随意投票支持这个bug。

它看起来不像是个bug;看起来是故意的。显然,他们想将这些信息保存在
QDateTimePrivate
中。我得问问他们为什么p要添加的其他方法-显然.NET的
DateTime
也不会为UTC时间打印Z。很有趣。显然在4.8.0中修复了。甚至在4.8.5中也没有修复!