2012-02-18 1 views
0

меня открывать и закрывать раз ресторанов в этом формате в базе данных в 2 колонкиКак обрабатывать время открытия и закрытия в Python?

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 

Мой случай использования в выяснить, исходя из текущего времени, если ресторан открыт? Как мне обрабатывать вышеуказанные 2 сценария?

+0

Выберите строки с правильными днями недели и opencol <текущее время и закрытие> текущее время? Если найдено, ресторан открыт. – yak

+1

Возможный дубликат [Работа с датой в C#] (http://stackoverflow.com/questions/9317208/working-with-date-in-c-sharp) –

ответ

3

Модуль datetime предоставляет все, что вам нужно.

>>> import datetime 
>>> now = datetime.datetime.now() 
>>> now 
datetime.datetime(2012, 2, 18, 20, 38, 53, 271145) 

Вы можете получить текущий день недели с datetime.datetime.weekday.

>>> now.weekday() 
5 

Fetch значения базы данных и поместить их в 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; большинство случаев использования (не совсем уверенно в бизнесе по будням, хотя с быстрым поиском, по крайней мере, похоже, его поддерживают) должны быть удовлетворены на уровне базы данных, но только если вы укажете, что это (я имею в виду базу данных, которую вы использование) ...

+0

Вы определенно ответили более подробно, чем я. Будет ли 'open_time John

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]; 

В зависимости от остальных вам, возможно, потребуется использовать также и минуты, но с предоставленными вами данными вы можете сократить этот случай.

+0

Использование 'strftime' - не то, что нужно сделать здесь; 'd.weekday',' d.hour' и 'd.minute' - это значения, которые вы хотите. –

+0

Да, им снова напомнили , когда я увидел ваш ответ. Недостаток необходимости делать много Java и C# в последние месяцы. – asmodai

Смежные вопросы