我在 Linux 上将 C++ 和 libpq(PostgreSQL C 库)与 gcc 和 PostgreSQL 8.2.19 一起使用。我正在使用“带有时区的时间戳”类型的列。libpq 将查询结果作为 C 字符串返回。有时(并非总是)我发现返回的字符串向前移动一小时(但与其他时区相同:+02 即 CEST)。我验证了问题直接出在查询返回的字符串中(一个普通的 SELECT,其列名包含“带有时区的时间戳”类型),而不是后续的转换,并且大多数执行运行准确。这是 Linux 和/或 PostgreSQL 的一种(已知)错误吗?
编辑:有一次错误发生在以下转换中,所以我在我的平台上尝试了这段代码(显然包括库) http://codepad.org/HiBbjX0V 实际上,即使这并不连贯,但错误恰恰相反:大多数时间是向前移动一小时,只有在第二个输出中,小时仍然是 11:33:52,就像在代码中一样。我尝试了手动设置小时和互联网小时的 Ubuntu。两种情况都存在错误。我认为错误是在系统级别,但我不知道是什么。
编辑:我不确定该错误是否也来自 PostgreSQL,因为带有时间戳的行会快速连续更新两次,也许 errr 是由于第一次更新时将小时转换为 Linux 类型,如我在代码中所示。