2013-04-22 89 views
8

问题是我希望它忽略日期和时间因素。以下是我有:从日期时间提取时间并确定时间(不是日期)是否在范围内?

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 

原样,我得到这个错误:

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

当我改变相关线路:

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

我得到这个错误:

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

我知道我正在使用两个diff erent库或whatnot,但我不知道如何转换它们之间或完成我想要做的只使用一个。我只想让它忽略日期,只检查时间是否在指定范围内。由于我在代码中的其他地方使用了一个库,所以Python 2.6是必须的。

回答

14

这条线:

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

返回datetime对象as per the docs

可以通过在解释器交互运行下面的命令测试此自己:

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

返回的日期时间的时间部分可以然后使用.time()方法来访问。

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

datetime.time()结果可用于您的时间比较。

+0

谢谢!我很感激! – Dan 2013-04-22 03:52:07

相关问题