- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我希望能够存储多家餐厅的营业时间并确定一家商店现在是否营业,但我对如何处理午夜后关门的地方感到困惑。
Here's an example of a restaurant's opening hours:
Monday: 6:00AM-10:00PM
Tuesday: 6:00AM-10:00PM
Wednesday: 6:00AM-10:00PM
Thursday: 6:00AM-10:00PM
Friday: 6:00AM-11:59PM
Saturday: 0:00AM-3:00AM, 6:00AM-11:59PM
Sunday: 0:00AM-3:00AM, 6:00AM-10:00PM
我不确定应该使用哪种类型的模式来表示这一点,以便我可以确定特定餐厅现在是否营业。
设置架构后,我的目标是能够确定任何特定餐厅的以下内容:
因此,如果当前时间是餐厅开门前 15 分钟,则餐厅应被视为营业,如果当前时间是餐厅关门前 45 分钟,则餐厅应被视为已关闭,两者之间的任何时间都应被视为营业,考虑到午夜的翻转。
下面是一些预期的输入和结果:
Restaurant 1
Monday: 6:00AM-10:00PM
Tuesday: 6:00AM-10:00PM
Wednesday: 6:00AM-10:00PM
Thursday: 6:00AM-10:00PM
Friday: 6:00AM-11:59PM
Saturday: 0:00AM-3:00AM, 6:00AM-11:59PM
Sunday: 0:00AM-3:00AM, 6:00AM-10:00PM
Current day/time -> Result
Monday 12:00PM -> Open
Monday 2:00AM -> Closed
Monday 5:45AM -> Open
Monday 9:30PM -> Closed
Saturday 4:00AM -> Closed
Saturday 11:55PM -> Open
Sunday 2:00AM -> Open
Sunday 2:25AM -> Closed
我不确定我将如何处理翻转时间,例如确定餐厅是否会在周六晚上 11:55 从现在起 45 分钟后营业。
Here's another example of a restaurant's opening hours:
Monday: 10:00AM-10:00PM
Tuesday: 10:00AM-10:00PM
Wednesday: 10:00AM-10:00PM
Thursday: 10:00AM-10:00PM
Friday: 10:00AM-11:59PM
Saturday: 0:00AM-11:59PM
Sunday: 0:00AM-9:00PM
周六这家店是24小时营业的,所以我也需要能够处理这个案子。
A restaurant could be open 24/7:
Monday: 0:00AM-11:59PM
Tuesday: 0:00AM-11:59PM
Wednesday: 0:00AM-11:59PM
Thursday: 0:00AM-11:59PM
Friday: 0:00AM-11:59PM
Saturday: 0:00AM-11:59PM
Sunday: 0:00AM-11:59PM
A restaurant could have 0, 1, 2, or more periods per day:
Monday: CLOSED
Tuesday: CLOSED
Wednesday: 10:00AM-2:00PM, 5:00PM-10:00PM
Thursday: 10:00AM-2:00PM, 5:00PM-10:00PM
Friday: 10:00AM-2:00PM, 5:00PM-11:59PM
Saturday: 0:00AM-3:00AM, 10:00AM-2:00PM, 5:00PM-11:59PM
Sunday: 0:00AM-3:00AM, 10:00AM-2:00PM, 5:00PM-9:00PM
所以我的目标是找到给定餐厅及其营业时间的当前时间是否介于:
并找到一种存储信息的好方法,以便可以确定多家餐厅的信息。
因为每天可能有 0 个或多个时间段,所以我认为每行存储 1 个时间段是有意义的,但除此之外我不确定该怎么做。
最佳答案
我想我可能会想这样存储它:
bit_code opens closes
69 06:00:00 22:00:00
48 06:00:00 03:00:00
我用数字表示了星期几,如下所示:
Monday - 1
Tuesday - 2
Wednesday - 4
Thursday - 8
Friday - 16
Saturday - 32
Sunday - 64
所以,星期五 + 星期六 = 48
编辑:
考虑以下示例:
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(weekday_code INT NOT NULL
,opens TIME NOT NULL
,closes TIME NOT NULL
);
INSERT INTO my_table VALUES
(69,'06:00:00','22:00:00'),
(48,'06:00:00','03:00:00');
现在是 23:30:00。我认为以下内容会告诉我们餐厅目前在一周中的哪几天营业(并考虑 15 分钟和 45 分钟的规则)...
SELECT *
FROM my_table
WHERE CAST('23:30:00' AS TIME) >= opens - INTERVAL 15 MINUTE
AND CAST('23:30:00' AS TIME) <= (CASE WHEN closes < opens THEN closes + INTERVAL 24 HOUR ELSE closes END) - INTERVAL 45 MINUTE;
+--------------+----------+----------+
| weekday_code | opens | closes |
+--------------+----------+----------+
| 48 | 06:00:00 | 03:00:00 |
+--------------+----------+----------+
我们可以在应用程序代码或 SQL 中引入其他技巧来破译“48”指的是一周中的哪几天。同样,我们不必以这种方式存储星期几;它看起来非常紧凑,特别是如果有很多餐馆(营业时间相当一致)。
无论如何,如果采用这种方法......只是为了好玩/完整......
SELECT a.x
FROM
( SELECT 1 x UNION
SELECT 2 UNION
SELECT 4 UNION
SELECT 8 UNION
SELECT 16 UNION
SELECT 32 UNION
SELECT 64
) a
JOIN my_table b
ON a.x = ( a.x & b.weekday_code)
AND CAST('23:30:00' AS TIME) >= b.opens - INTERVAL 15 MINUTE
AND CAST('23:30:00' AS TIME) <= (CASE WHEN b.closes < b.opens THEN b.closes + INTERVAL 24 HOUR ELSE b.closes END) - INTERVAL 45 MINUTE;
+----+
| x |
+----+
| 16 |
| 32 |
+----+
由此我们可以推断,如果今天是星期五或星期六,则餐厅营业。
请注意,在 SQL 中可能有更优雅的表达方式 - 或者在应用程序代码中处理位解码可能更智能,
关于php - 一种存储开放时间以确定某个地方现在是否开放的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52025249/
您好,我是使用 xampp 的 PHPmyadmin 新手,没有 MYSQL 背景。当我喜欢研究它是如何工作的时,我的脑海中浮现出一个想法,它让我一周都无法休眠,因为我似乎无法弄清楚如何使用 MIN(
Go docs say (强调): Programs using times should typically store and pass them as values, not pointers.
我有一组用户在 8 月 1 日有一个条目。我想找到在 8 月 1 日有条目但在 8 月 2 日没有做任何事情的用户。 现在是 10 月,所以事件已经过去很久了。 我有限的知识说: SELECT * F
我有以下代码,主要编码和取消编码时间结构。这是代码 package main import ( "fmt" "time" "encoding/json" ) type chec
您能详细解释一下“用户 CPU 时间”和“系统 CPU 时间”吗?我读了很多,但我不太理解。 最佳答案 区别在于时间花在用户空间还是内核空间。用户 CPU 时间是处理器运行程序代码(或库中的代码)所花
应用程序不计算东西,但做输入/输出、读取文件、使用网络。我希望探查器显示它。 我希望像 callgrind 中的东西一样,在每个问题中调用 clock_gettime。 或者像 oprofile 那样
目前我的 web 应用程序接收 websocket 数据来触发操作。 这会在页面重新加载时中断,因此我需要一个能够触发特定事件的客户端解决方案。 这个想法可行吗? 假设你有 TimeX = curre
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我有一个 Instant (org.joda.time.Instant) 的实例,我在一些 api 响应中得到它。我有另一个来自 (java.time.Instant) 的实例,这是我从其他调用中获得
如何集成功能 f(y) w.r.t 时间;即 'y'是一个包含 3000 个值和值 time(t) 的数组从 1 到 3000 不等。所以,在整合 f(y) 后我需要 3000 个值. 积分将是不确定
可以通过 CLI 创建命名空间,但是如何使用 Java SDK 来创建命名空间? 最佳答案 它以编程方式通过 gRPC API 完成由服务公开。 在 Java 中,生成的 gRPC 客户端可以通过 W
我有一个函数,它接受 2 组日期(开始日期和结束日期),这些日期将用于我的匹配引擎 我必须知道start_date1和end_date1是否在start_date2和end_date2内 快进:当我在
我想从 Python 脚本运行“time”unix 命令,以计算非 Python 应用程序的执行时间。我会使用 os.system 方法。有什么方法可以在Python中保存这个输出吗?我的目标是多次运
我正在寻找一种“漂亮的数字”算法来确定日期/时间值轴上的标签。我熟悉 Paul Heckbert's Nice Numbers algorithm . 我有一个在 X 轴上显示时间/日期的图,用户可以
在 PowerShell 中,您可以格式化日期以返回当前小时,如下所示: Get-Date -UFormat %H 您可以像这样在 UTC 中获取日期字符串: $dateNow = Get-Date
我正在尝试使用 Javascript 向父子窗口添加一些页面加载检查功能。 我的目标是“从父窗口”检测,每次子窗口完全加载然后执行一些代码。 我在父窗口中使用以下代码示例: childPage=wi
我正在尝试设置此 FFmpeg 命令的 drawtext 何时开始,我尝试使用 start_number 但看起来它不会成功。 ffmpeg -i 1.mp4 -acodec aac -keyint_
我收到了一个 Excel (2010) 电子表格,它基本上是一个文本转储。 单元格 - J8 具有以下信息 2014 年 2 月 4 日星期二 00:08:06 EST 单元格 - L8 具有以下信息
我收到的原始数据包含一列具有以下日期和时间戳格式的数据: 2014 年 3 月 31 日凌晨 3:38 单元格的格式并不一致,因为有些单元格有单个空格,而另一些单元格中有两个或三个字符之间的空格。所以
我想知道是否有办法在我的 Grails 应用程序顶部显示版本和构建日期。 编辑:我应该说我正在寻找构建应用程序的日期/时间。 最佳答案 在您的主模板中,或任何地方。 Server version:
我是一名优秀的程序员,十分优秀!