我在数据库中以2列
打开和关闭这种格式的餐馆opencol:00:00 closecol:24:00 weekday:1,
opencol:23:00,closecol:02:00 weekday:2 etc.
有些餐馆在同一个工作日有2条记录,如
opencol:11:00 closecol:14:00 weekday:1
opencol:16:00 closecol:23:00 weekday:1
我的用例是根据当前时间计算出餐厅是否开放?我如何处理上述两种情况?
答案 0 :(得分:3)
datetime
模块提供您所需的一切。
>>> import datetime
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2012, 2, 18, 20, 38, 53, 271145)
您可以使用datetime.datetime.weekday
获取当前工作日。
>>> now.weekday()
5
获取数据库值并将它们放入datetime.time
个对象(你弄清楚如何,不难理解; strptime
可能就是你所需要的。)
一些示例数据:
>>> opening_time = datetime.time(11, 0, 0, 0)
>>> closing_time = datetime.time(14, 0, 0, 0)
然后,比较时间:
>>> opening_time < now.time() < closing_time
False
目前尚未公开(因为现在是晚上8点38分)。
当然,一旦你需要比较多个值,它会变得更复杂,但这只是一个简单的迭代问题;更难的是你有多天的价值,因为你的样本数据似乎表明你可能有。但是,一旦你掌握了基础知识,就不难发现这些。
请注意,这在Python中处理所有内容;大多数用例(不太确定工作日业务,虽然快速搜索几个似乎支持它)应该能够在数据库级别满意,但只有你指定那个(我的意思是你的数据库) “正在使用”是......
答案 1 :(得分:0)
获取当前时间(当然,将其包装在一个很好的函数/方法中):
from datetime import datetime
d = datetime.now()
weekday = int(d.strftime("%w"))
hours = int(d.strftime("%H")
minutes = int(d.strftime("%M")
然后使用SQL查询执行以下操作:
SELECT * FROM times WHERE restaurant = [id] AND weekday = [weekday] AND opencol <= [hours] AND closecol < [hours];
根据您的其他数据,您可能还需要使用会议记录,但是根据您提供的数据,您可以缩短这种情况。