2013-04-22 36 views
8

Vấn đề là tôi muốn nó bỏ qua ngày và chỉ yếu tố trong thời gian. Dưới đây là những gì tôi có:Trích xuất thời gian từ ngày giờ và xác định xem thời gian (không phải ngày) có nằm trong phạm vi không?

import time 
from time import mktime 
from datetime import datetime 

def getTimeCat(Datetime): 
    # extract time categories 
    str_time = datetime.strptime(Datetime, "%m/%j/%y %H:%M") 
    ts = datetime.fromtimestamp(mktime(str_time)) 

    # --> Morning = 0400-1000 
    mornStart = datetime.time(4, 0, 1) 
    mornEnd = datetime.time(10, 0, 0) 

    # --> Midday = 1000-1600 
    midStart = datetime.time(10, 0, 1) 
    midEnd = datetime.time(16, 0, 0) 

    # --> Evening = 1600-2200 
    eveStart = datetime.time(16, 0, 1) 
    eveEnd = datetime.time(22, 0, 0) 

    # --> Late Night = 2200-0400 
    lateStart = datetime.time(22, 0, 1) 
    lateEnd = datetime.time(4, 0, 0) 

    if time_in_range(mornStart, mornEnd, ts): 
     timecat = 0 #morning 
    elif time_in_range(midStart, midEnd, ts): 
     timecat = 1 #midday 
    elif time_in_range(eveStart, eveEnd, ts): 
     timecat = 2 #evening 
    elif time_in_range(lateStart, lateEnd, ts): 
     timecat = 3 #late night 

    return timecat 

Như là, tôi nhận được lỗi này:

TypeError: argument must be 9-item sequence, not datetime.datetime 

Khi tôi có sự thay đổi liên quan đến:

str_time = time.strptime(Datetime, "%m/%j/%y %H:%M") 

tôi nhận được lỗi này:

TypeError: descriptor 'time' requires a 'datetime.datetime' object but received a 'int' 

Tôi biết tôi đang làm việc với hai điểm khác biệt các thư viện hay thư rác không rõ ràng, nhưng tôi không chắc chắn cách chuyển đổi giữa chúng hoặc hoàn thành những gì tôi muốn làm chỉ bằng một. Tôi chỉ muốn nó bỏ qua ngày và chỉ kiểm tra xem thời gian có nằm trong phạm vi được chỉ định hay không. Python 2.6 là một PHẢI do một thư viện tôi đang sử dụng ở nơi khác trong mã.

Trả lời

14

dòng này:

str_time = datetime.strptime(Datetime, "%m/%j/%y %H:%M") 

trả về một đối tượng datetimeas per the docs.

Bạn có thể kiểm tra điều này bản thân bằng cách chạy lệnh sau tương tác trong thông dịch viên:

>>> import datetime 
>>> datetime.datetime.strptime('12/31/13 00:12', "%m/%j/%y %H:%M") 
datetime.datetime(2013, 1, 31, 0, 12) 
>>> 

Phần thời điểm datetime trở sau đó có thể được truy cập bằng cách sử dụng phương pháp .time().

>>> datetime.datetime.strptime('12/31/13 00:12', "%m/%j/%y %H:%M").time() 
datetime.time(0, 12) 
>>> 

Kết quả datetime.time() sau đó có thể được sử dụng trong so sánh thời gian của bạn.

+0

Cảm ơn! Tôi đánh giá cao nó! – Dan

Các vấn đề liên quan