0

我创建了一个项目来读取事件前后的数据。

例如:令 D1、D2、D3 为 QDateTime 对象:
令 D1 为值为2014-03-09T2:30:00的对象。
令 D2 为值为2014-03-09T1:30:00的一个。
令 D3 为一,值为2014-03-09T3:30:00

D1.date() will return QDate(2014,3,9).
D1.time() will return QTime(2,30).
D1.toString() will return “”.
(D1 > D2) is true.
(D1 < D2) is false.
(D1 > D3) is false.
(D1 < D3) is true.
(D1 == D1) is true.
D1.secsTo(X) is always 0.
X.secsTo(D1) is always 0, for all X.

在这种情况下,D1.secsTo(X) 用于计算从凌晨 1:00 开始的报告。DST 效应发生在凌晨 2-3 点之间。

我需要做什么来纠正这种转变?

4

1 回答 1

1

文档声称 QDateTime 类应该自动处理 DST,但这似乎是 Qt 中的一个错误。我刚刚尝试了您提供的输入,如果任一时间在凌晨 2 点到 3 点之间,则 secsTo() 方法的值为 0。如果我将时间更改为凌晨 3 点之后,它会提供正确的偏移量。

例如:

D1 = 2:30 AM
D2 = 2:45 AM
D1.secsTo(D2) gives 0

D1 = 3:30 AM
D2 = 3:45 AM
D1.secsTo(D2) gives 900

我提交了错误报告

编辑

修复错误后,您当前的解决方案应该可以工作。与此同时,另一种解决方案可能是在进行任何计算之前将您的时间戳转换为 UTC。QDateTime 类有一个 toUTC() 方法。我认为这应该完全避免 DST 问题。

于 2014-03-25T19:20:30.537 回答