2017-08-08 4 views
-1

次の規則に基づいて型をdatetime変数に割り当てる必要があります。 datetimeType1の日付間隔に属する場合は、タイプはType1です。同じロジックがType2Type3に適用されます。例えばdatetime変数に型を割り当てる方法

Type1 
01/01/17 - 07/04/17 
18/04/17 - 25/05/17 
01/10/17 - 22/12/17 

Type2 
08/04/17 - 17/04/17 
26/05/17 - 30/06/17 
27/08/17 - 30/09/17 
23/12/17 - 31/12/17 

Type3 
01/07/17 - 26/08/17 

from datetime import datetime 
dt = datetime.strptime("2017-04-10 11:00:34.0", "%Y-%m-%d %H:%M:%S.%f") 

dtの値はタイプType2に対応しなければなりません。 if thenルールを大量に使用せずにPython 2.7でこのタスクを実装する方法はありますか?これを構成することができる方法のラフスケッチとして

+1

はっきり言って、私は明確にしてください...それらの「型」を理解していません。 – deceze

+0

@deceze: 'datetime'が' Type1'の日付間隔に属する場合、型は 'Type1'です。同じロジックが 'Type2'と' Type3'に適用されます。 – Dinosaurius

+0

あなたはちょうどいくつかの条件 'if t1 <= dt <= t2:type = 1 ...'を定式化したいと思いますが、 'if..elif'をたくさんしなくてもかまいません。 – deceze

答えて

1

from datetime import datetime, date 

types = { 
    'type1': (
     (date(2017, 1, 1), date(2017, 4, 7)), 
     ... 
    ), 
    ... 
} 

dt = datetime.strptime('2017-04-10 11:00:34.0', '%Y-%m-%d %H:%M:%S.%f') 
the_type = None  

for t, ranges in types.items(): 
    for start, end in ranges: 
     if start <= dt.date() <= end: 
      the_type = t 
      break 

    if the_type is not None: 
     break 
+0

年をスキップしたい場合は、同じアプローチを維持することは可能ですか?言い換えれば、年が重要でない場合。 – Dinosaurius

+0

次に、 'date'オブジェクトを格納するのではなく、'(日、月) 'タプルだけを格納し、単純に比較を調整します。 – deceze

+0

あなたがお勧めしたとおりにしました。比較は次のように行われます: 'date(dt.year、start(0)、start(1))<= dt.date()<= date(dt.year、end(0)、end(1)) : '、しかし始まりと終わりが数字であるというエラーを返す。型から 'date'を削除しただけでは、それらを数値にすることができるので、それらはタプルでなければなりません。 – Dinosaurius

関連する問題