代码之家  ›  专栏  ›  技术社区  ›  Tim Ridgely

存储和搜索商店的开店/关门时间

  •  2
  • Tim Ridgely  · 技术社区  · 15 年前

    我正在编写一个为我们的商店编制数据索引的应用程序,其中一些商店的营业时间很晚(上午8点到凌晨2点)。我们需要能够快速搜索这个数据库——基本上,运行一个查询来查找在给定时间点(现在,星期日凌晨1点,随便什么)打开了哪些商店。

    此外,开店/关门时间可能会一天一天地变化——例如,有些商店在周日关门。

    对我来说,最明显的解决方案是创建一个表,在其中我有一行存储ID、日期、打开时间和关闭时间。比如周一,上午8点到凌晨2点,实际上是两排,一排是周一0800-2400,一排是周二0000-0200。

    我们有很多存储,所以搜索必须执行得很好(基本上,数据必须是索引友好的),但我也必须以一种人类可读的格式显示这些数据。我目前的解决方案是这样的:

    周一:8:00-午夜 星期二:午夜-凌晨2:00;上午8:00-午夜

    我只是想知道在我直接跳到一个实现之前,是否还有其他人有其他的解决方案。谢谢!

    1 回复  |  直到 15 年前
        1
  •  3
  •   Larry K    15 年前

    当美国公共广播系统(PBS)在几年前面临同样的问题时,他们发明了“30小时一天”的概念,即每天开始的00:00是午夜,每天结束的24:00是午夜,第二天的25:00是1:00,第二天的30:00是6:00。这样的话,星期一26:00的关门时间是星期二上午2点。

    与表示一天中单个存储时间的两个记录不同,将“存储日”视为对象可能更面向对象。这样一来,1个记录=一天中有1个商店的时间。如果要存储两组打开/关闭时间,只需在记录中使用四个字段而不是两个字段——并适当地调整查询。

    请记住,您的查询应该使用您编写和发布的库/API。然后,库将处理数据存储及其数据布局。除了您的库之外,没有人应该直接查看数据库。

    时区 在这种应用程序中也非常重要。(希望)在某种程度上,连锁店将扩展到一个以上的时区。然后您需要确定查询的本地时间。--可能与处理查询的服务器的时区不同。

    进一步的思考--

    我现在看到你正在标准化到格林尼治标准时间。很好。您还可以使用日期时间值(vs时间值)并将其标准化为给定的一周时间。开放时间为1995年1月1日星期日上午10点至1995年1月2日星期一上午2点(从1995年1月1日星期日起以1995年1月1日为基础)。

    然后将你的“当前时间和日期”合理化,使之与1995年1月1日这周的相同点相匹配。然后查询以查找打开的存储天数。

    嗯,

    拉里