我们有一个列出体育赛事的应用。一个赛事与2支球队(主队和客队)相关联。在活动列表中,我们将在主队的时区中显示活动日期。我们以UTC格式存储数据库中的日期。我们需要在事件列表页面中添加一个日期过滤器,但问题是,因为我们将数据库中的日期存储在UTC中,并且事件列表中的日期显示在主队的时区中,所以日期过滤器显示意外的结果。日期作为2016-02-18 03:30:00+00
(UTC)保存在我们的数据库中。当在事件列表中向用户显示时,它是02/17/2016 7:30pm
,因为主队位于宾夕法尼亚州,时区为America/New_York
。
现在当用户将日期过滤器设置为02/17/2016
时,我们正在查询数据库以获取日期为02/17/2016
的所有事件。它会导致意外的结果,因为它与事件不匹配,因为在我们的数据库中,日期为02/18/2016
。
我能想到的一个解决方案是show 2 date&事件列表中的时间列。
日期(UTC)|时间(UTC)|日期(主队的时区)|时间(主队的时区)
并告知用户使用日期过滤器时,它将使用日期(utc)
过滤事件但我们目前正在寻找更好的解决方案。任何帮助/建议将不胜感激:)
编辑:
event 1:
- date: 01/12/2016
- time: 9:00am
- home team's timezone: America/Chicago
event 2:
- date: 01/12/2016
- time: 9:00am
- home team's timezone: America/Denver
event 3:
- date: 01/12/2016
- time: 9:00am
- home team's timezone: Asia/Singapore
如果用户在日期过滤器中选择01/12/2016。它仍应显示上述3个事件。
答案 0 :(得分:0)
在数据库中添加一个新字段,该字段以当地时间存储日期,并使用该字段过滤结果。
所以当你过滤说2016-04-01时,它实际上会跨越不同的时区过滤事物,即不同时代的事件
所以请告诉我所有事件,例如星期四,无论球队在哪里(意味着一支球队的星期四是另一支球队的星期五)
它会过滤本地化到存储日期的结果。
另一种解决方案是使用即时转换查询。
示例:
where convert_to_local_without_timezone(event_datetime, event_tz) = date_filter
如果没有可以实现此功能的现有功能,它可以是用户定义的函数 - http://www.postgresql.org/docs/8.0/static/xfunc.html。
致记:
Aries,Ryan Johnson和Nikki Erwin Ramirez