2011-07-25 3 views
2

저는 Python으로 프로그래밍하고 SQLAlchemy를 사용하여 업무 시간을 저장합니다.
업무 시간은 세 부분으로 구성되어있다 : 비트 마스크 Python, SQLAlchemy : 업무 시간을 이진 비트 마스크로 저장

  • 사업이 열리는 시간으로 바이너리에 저장된 주

    1. 시대,
    2. 사업이 종료되는 시간을.

    비트 마스크는 다음과 같이 작동합니다. 평일의 다른 순서를 나타내는 0 또는 1 인 7 자리 숫자가 있습니다. 각 위치는 요일을 나타냅니다. 첫 번째 위치는 월요일을 나타내며 마지막 위치는 일요일을 나타냅니다. 예를 들어, 1111100은 월요일 - 금요일 및 0000111, 금요일 - 토요일을 나타냅니다. 또한, 나는 군대 시간에 시간을 저장하고있다, 0600은 6AM을 의미하고 1800은 6PM을 의미한다.

    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'), 
    }) 
    

    주 중첩의 일을 나타내는 비트 마스크의 경우 두 가지를 파악하기 위해 파이썬의 방법은 무엇입니까? 또한 두 쌍의 Hour 객체가 주어질 때 현재 비즈니스가 열려 있는지 확인하는 가장 좋은 방법은 무엇입니까?

  • +1

    이렇게 설정 한 날짜에 해당 시간이 동일하다고 가정합니다. – Santa

    +0

    또한 중복으로 무엇을 의미합니까? – Santa

    +0

    겹침으로써 나는 갈등을 의미합니다. 특정 업무용 업무 시간 인 M-F 오전 8 시부 터 오후 5 시까 지 근무 시간을 저장했다고 가정 해보십시오. 그런 다음 누군가가 F-Su 9AM에서 오후 4 시까 지 다른 Hours 개체를 추가하려고합니다. 이 때가 서로 충돌하므로 화해해야합니다. – john

    답변

    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'이 제공됩니다.

    실제로 숫자를 정수로 저장하는 경우 bin(bitmask)[2:] 또는 "{0:b}".format(bitmask) 중 하나로 변환하는 것이 가장 쉽습니다.

    "현재 열려있는 시간 쌍의 두 쌍"이 무슨 뜻인지 잘 모르겠습니다. 두 시간의 겹치기를 원하십니까? 그들이 전체 시간이면, 그것의 쉬운 :

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

    당신에게 두 범위의 시간의 목록을 제공합니다.

    +0

    @awfullyjohn 답변이 도움이 되었으면 질문에 대한 답변을 수락하십시오. – agf

    관련 문제