Я программирую на Python и использую SQLAlchemy для хранения рабочих часов.
Рабочее время состоит из трех частей:
- Дни недели, хранящиеся в двоичном формате как битовая маска
- время открытия бизнеса,
- время закрытия бизнеса.
Битовая маска работает следующим образом. Есть 7 цифр, которые либо 0, либо 1, которые будут представлять различные последовательности дней недели. Каждая позиция представляет день недели. Первая позиция обозначает понедельник, а последняя - воскресенье. Например, 1111100 представляет понедельник-пятница, а 0000111 пятница-суббота. Кроме того, я храню часы в военное время, 0600 означает 6 утра и 1800 означает 6 вечера.
hours = Table('hours', Base.metadata,
Column("id", Integer, primary_key=True),
Column("businessid", Integer, ForeignKey('businesses.id')),
Column("days", Integer),
Column("open", Integer),
Column("close", Integer),
)
class Hours(object):
def __init__(self, days=None, open=None, close=None):
self.days = days
self.open = open
self.close = close
mapper(Hours, hours)
mapper(Business, businesses, properties={
'hours': relationship(Hours, backref='business'),
})
Как Pythonic может выяснить, когда две из битовых масок, представляющих дни недели, перекрываются? А также, каков наилучший способ узнать, открыт ли бизнес в настоящее время, если ему предоставлены две пары объектов Hours?