4商店时区过滤器不准确



我在过滤包含 4Store 时区的两个时间过滤器之间的记录时遇到问题。我的记录目前大多在+02:00时区,这是一种xsd:dateTime类型。

当我尝试这样的过滤器时:

FILTER (?time >= xsd:dateTime('2013-08-02T01:00:00.000+02:00') && ?time <=
xsd:dateTime('2013-08-03T22:00:00.000+02:00'))

FILTER (?time >= "2013-08-02T01:00:00.000+02:00"^^xsd:dateTime &&
?time <= "2013-08-03T22:00:00.000+02:00"^^xsd:dateTime)

数据库将这些时间偏移为时区量,然后将它们与数据库中的时间逐字进行比较,忽略它们的时区。这意味着,当我想要示例中范围内的时间时,我必须删除时区,或者输入Z+00:00。当我阅读时间时,它们写得正确,时区为+02:00。它以某种方式忽略了时区比较,但是当我将区域放入查询中时,商店会移动时间。当我在系统中有更多时区时,这将是一个重大的混乱。

有人可以对此提供一些建议吗?

<rant>这是"时区偏移",而不是"时区"。 请使用正确的术语以避免混淆。 (但我很好地理解了你的问题。 </rant>

最好的建议是在存储数据之前应用偏移量,以便存储在数据库中的值为 UTC。 例如,如果您有2013-08-03T22:00:00.000+02:00,则可以存储2013-08-03T20:00:00.000Z。 由于偏移量比 UTC 早两个小时,因此减去两个小时即可返回到 UTC 时间。 大多数语言都有一种方法可以在没有实际减法运算的情况下做到这一点,因此请在可用时使用它。

查询时,您执行相同的操作。 在将查询输入传递到筛选器之前,将查询输入规范化为 UTC。 然后一切都按预期排列。

我不熟悉4store,但是许多数据库会自动为您进行这种转换。 有些甚至允许您使用原始偏移量存储值,并且仅在构建索引时进行转换。 如果4store有这方面的设施,那么你应该使用它们。 我检查了文档,没有找到任何关于它如何处理日期的方法。

相关内容

  • 没有找到相关文章

最新更新