首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >4存储时区筛选不准确

4存储时区筛选不准确
EN

Stack Overflow用户
提问于 2013-09-27 21:24:42
回答 1查看 69关注 0票数 2

在4Store中包含时区的两个时间筛选器之间过滤记录时遇到问题。我的记录当前主要位于+02:00时区,并且是xsd:dateTime类型。

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

代码语言:javascript
复制
FILTER (?time >= xsd:dateTime('2013-08-02T01:00:00.000+02:00') && ?time <=
xsd:dateTime('2013-08-03T22:00:00.000+02:00'))

代码语言:javascript
复制
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。它以某种方式忽略了时区比较,但当我将该区域放入查询中时,存储会移动时间。当我在系统中有更多的时区时,这将是一个主要的混乱。

有人能对此给出一些建议吗?

EN

回答 1

Stack Overflow用户

发布于 2013-09-27 23:46:37

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

最好的建议是在存储数据之前应用偏移量,这样存储在数据库中的值就是UTC。例如,如果你有2013-08-03T22:00:00.000+02:00,你应该存储2013-08-03T20:00:00.000Z。由于偏移量比UTC早两个小时,因此您需要减去两个小时才能回到UTC时间。大多数语言都有一种不需要实际减法操作就能做到这一点的方法,所以请在可用的时候使用它。

当你查询的时候,你也会做同样的事情。在将查询输入传递到筛选器之前,将查询输入规范化到UTC。然后一切都按预期排列好了。

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19051927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档