gpt4 book ai didi

python ,SQLAlchemy : Storing business hours as binary bitmask

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:45:04 24 4
gpt4 key购买 nike

我正在使用 Python 编程并使用 SQLAlchemy 来存储营业时间。
营业时间由三部分组成:

  1. 星期几以二进制形式存储为位掩码
  2. 营业时间,
  3. 企业关闭的时间。

位掩码是这样工作的。有 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 对象的情况下,确定企业当前是否营业的最佳方法是什么?

最佳答案

就检查星期几而言,如果用二进制表示“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' 用于周五重叠。

如果您实际上将数字存储为整数,那么将它转换为一个可能是最简单的方法,可以使用 bin(bitmask)[2:]"{0: b}".format(位掩码).

我不确定“当前打开...两对小时对象”是什么意思。你想要两对时间的重叠吗?如果他们是整小时,那很简单:

[hour for hour in range(firsthour, secondhour) if hour in range(openinghour, closinghour)

将为您提供两个范围内的小时列表。

关于 python ,SQLAlchemy : Storing business hours as binary bitmask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6823627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com