我使用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方法来确定代表星期几的两个位掩码何时重叠?而且,当给出两对小时对象时,找出业务当前是否处于打开状态的最佳方法是什么?
答案 0 :(得分:3)
就检查一周中的几天而言,如果是二进制,则表示形式为'1011011'的字符串:
overlap = [n for n in range(7) if (bitmask1[n] == bitmask2[n] == '1')]
将为您提供重叠日期的数字列表(从0到6) - 周五重叠的[4]。
overlap = ''.join(('1' if (bitmask1[n] == bitmask2[n] == '1') else '0') for n in range(7))
会给你一个新的位掩码字符串 - '00000100'表示星期五重叠。
如果您实际上将数字存储为整数,那么将{1}}或bin(bitmask)[2:]
转换为1可能是最简单的。
我不确定你的意思是“目前开放...两对小时的物体”。你想要两对小时的重叠吗?如果他们是整个小时,那很容易:
"{0:b}".format(bitmask)
将为您提供两个范围内的小时列表。