問題は、日付を無視し、時刻のみを考慮に入れることです。ここに私が持っているものがあります:
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は、コードの他の場所で使用しているライブラリのために必須です。
この行:
_str_time = datetime.strptime(Datetime, "%m/%j/%y %H:%M")
_
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()
の結果を時間比較で使用できます。