32

問題は、日付を無視して時間のみを考慮したいということです。ここに私が持っているものがあります:

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'

2 つの異なるライブラリなどを使用していることはわかっていますが、それらの間で変換する方法や、1 つだけを使用してやりたいことを達成する方法がわかりません。日付を無視して、時間が指定された範囲内にあるかどうかのみを確認したいだけです。Python 2.6 は、コードの他の場所で使用しているライブラリのため、MUST です。

4

2 に答える 2

53

この行:

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

docs に従ってdatetimeオブジェクトを返します。

インタープリターで次のコマンドを対話的に実行することで、これを自分でテストできます。

>>> 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()時間の比較に使用できます。

于 2013-04-22T03:43:32.473 に答える