【问题标题】:Storing opening hours for a full day (24 hours)存储一整天的营业时间(24 小时)
【发布时间】:2011-08-30 13:17:53
【问题描述】:

我正在编写一个程序,该程序将商店的营业时间存储在数据库time 字段中,并且想知道正确的时间范围是多少,如果我想在特定日期表示商店 24 小时营业。是 0:00-23:59 吗?还是 0:01-0:00 ?两种格式在商店关闭时都有一分钟的间隙。是0:00-0:00吗? 一天的开始时间是否因地区而异?

【问题讨论】:

  • 在我的程序中,我有函数 is_open(datetime) 获取日期时间的日期部分(在 99% 的情况下是当前时间),将它与数据库的关闭时间结合起来返回日期时间 is_open 应该全天返回 true。

标签: database time localization


【解决方案1】:

我见过一些商店在早上和晚上营业,但在下午不营业的用例。

无论商店是否有多个班次,我都会存储一个间隔 30 分钟(您也可以间隔 1 小时或 15 分钟)的 Hours 表,并用它来标记商店营业的任何时间或关闭。

【讨论】:

    【解决方案2】:

    条件本身并不真正适合您的存储概念,但是由于您正在完成的工作有许多无效值(end 开始,因此这必须代表一整天。 0:00 - 23:59 有一个合理的含义,所以我会避免那个。

    另一种选择是使用开始时间 + 长度而不是两次。我想我会根据喜好选择这个。

    我认为一天的开始是无关紧要的;如果您保持数据存储和表示层独立,那么您可以在表示层中进行本地化(即在打印时间时),并且数据存储不会关心一天的开始时间(因此使用 UTC 或存储时区)。

    实施时需要注意的一点:您没有办法让商店每天营业两次(例如午餐时间)或更多时间。

    【讨论】:

      【解决方案3】:

      根据您的数据库引擎,这可能需要几秒钟,这样您的商店就会在 00:00:00 到 23:59:59 之间营业。那么1秒的重叠也不算太差。

      在处理这个问题时,最重要的是要记住,有些商店会 24 小时营业,但会在某个时间开始营业。例如,早上 6 点到第二天早上 6 点。

      存储它的一种方法是将打开时间设置为某种时间跨度,可能只是打开时间后的秒数。这样一来,您就可以 24 小时拥有 84600。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-10
        • 1970-01-01
        • 2020-03-21
        • 2011-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多