当前位置: 首页 > 知识库问答 >
问题:

从代表24小时的24值整数列表中导出状态

孔棋
2023-03-14

我正试图找到一种方法,如果可能的话,在单个python对象中表示一个项目的三种可用性状态。

当前,我必须提取一个json字段,其中包含一个日程安排、任何可能的预订,并表示接下来24小时的可用性和不可用性。

首先想到的是做一个列表,其中的3状态代表24小时。

hours = [0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0] # example

|0不可用|1可用(由于当前时间在计划内)|2已预订但不可用

# postgres json field of a single schedule cannot be altered 

schedule = {
    'availability': {
        'mon': { 'start': '01:00:00', 'end': '13:00:00'},
        'tue': { 'start': '01:00:00', 'end': '13:00:00'},
        'wed': { 'start': '01:00:00', 'end': '13:00:00'},
        'thu': { 'start': '01:00:00', 'end': '13:00:00'},
        'fri': { 'start': '01:00:00', 'end': '13:00:00'},
        'sat': { 'start': '01:00:00', 'end': '13:00:00'},
        'sun': { 'start': '01:00:00', 'end': '13:00:00'},
    }
}

# example booking

booking_today_start = datetime.datetime(2017, 4, 1, 1, 0, 0) # postgres date field
booking_today_end = datetime.datetime(2017, 4, 1, 10, 0, 0) # postgres date field
class User(SurrogatePK, Model):

    __tablename__ = 'users'

    # Relationships.
    reservations = db.relationship('Reservation', backref='guest', uselist=False)

    addresses = db.relationship('Properties', backref='host', uselist=False)

    # other user props below

class Property(SurrogatePK, Model):
    __tablename__ = 'addresses'

    # relationships Property.host > User
    host_id = db.Column(db.Integer, db.ForeignKey('users.id',
                                                  onupdate='CASCADE',
                                                  ondelete='CASCADE'),
                                                  index=True, nullable=False)
    reservations = db.relationship('Reservation',
                                    backref='address_property', uselist=False)
    #schedule
    schedule = Column(JSON, nullable=True)
    avail_type = Column(db.Unicode(50), nullable=True) # hourly etc
    is_avail = Column(db.Boolean(), default=True)

class Reservation(SurrogatePK, Model):
    __tablename__ =  'reservations'

    # relationships
    # Reservation.guest > User
    guest_id = db.Column(db.ForeignKey('users.id',
                                    onupdate='CASCADE', ondelete='CASCADE'),
                                    nullable=False)
    address_id = db.Column(db.ForeignKey('addresses.id', onupdate='CASCADE',
                                    ondelete='CASCADE'), nullable=False)

    status = db.Column(db.Enum('pending', 'confirmed', 'rejected',
        name='reservation_status_enum'), default='confirmed')

    reserve_start = db.Column(db.DateTime)
    reserve_end = db.Column(db.DateTime)

    @classmethod
    def _time_in_range(self, x):
        if self.reserve_start <= self.reserve_end:
            return self.reserve_start <= x <= self.reserve_end
        else:
            return self.start <= x or x <= self.reserve_end

共有1个答案

景河
2023-03-14

您的解决方案很好,因为它很快就能找到“在这个特定的时间是否可用”,但它不能支持17:30-20:45这样的范围,您必须做一些额外的计算才能问“在04:15是否可用?”

相反,我建议做与Postgres数据库相同的事情:存储每周每天的开始和结束时间。使用datetime.time对象。比较很简单,选择合适的星期几,并检查start_time<=time&&time<=end_time

 类似资料:
  • 问题内容: 我有一个将a解析为: 当我解析这个: 结果将是,当使用时: 8月29日 2011 00:44:00 当然,这应该是: 8月29日 2011 12:44:00 当我解析这个: 然后结果如预期的那样: 8月29日 2011 13:44:00 我怎样才能解决这个问题? 问题答案: 使用代替小时模式:

  • 问题内容: 在我的应用中,我需要不时格式化。我必须使用什么方法? 例如,时间如。如何在Java中将时间转换为24小时? 问题答案: 试试这个: 产生: 参见:http : //download.oracle.com/javase/1.5.0/docs/api/java/text/SimpleDateFormat.html

  • NowCoder 解题思路 递归 // java public ListNode ReverseList(ListNode head) { if (head == null || head.next == null) return head; ListNode next = head.next; head.next = null; ListNode

  • 前面小节介绍了表的设计三范式和单表的查询,本小节介绍如何将通过多个表进行关联查询数据,其中连表查询包括 LEFT JOIN、INNER JOIN、RIGHT JOIN。前面小节介绍过表的设计,其中有学生信息表 student、教师信息表 teacher、课程表 course、学生选课关联表 student_course。 1.插入表测试数据 为了演示方便,分别清空学生信息表 student、教师信

  • 1. 前言 Markdown 的原生语法不支持绘制图形,但通过扩展模块,我们可以将一些格式化的文字渲染成我们需要的图形。常用的图形有 “流程图”、“时序图”、“类图”、“状态图”、“甘特图”、"饼图" 等。 本节将重点介绍如何通过 Mermaid 绘制「状态图」。 状态图 (Statechart) 是描述一个实体基于事件反应的动态行为,是使对象达到某种状态的事件、条件或操作的图形化描述。 一个完整

  • 问题内容: 我有一个整数列表,我想生成一个包含所有连续整数列表的列表。 我有以下可行的方法,但似乎做起来很糟糕: 我已经看到其他问题,表明itertools.groupby是执行此操作的有效方法,但是我对该函数不熟悉,而且似乎在编写lambda函数来描述连续性方面遇到麻烦。 问题:是否有更好的方法(可能使用itertools.groupby?) 注意事项:full_list将具有1到59之间的整数