2017-08-08 60 views
-1

我需要根據以下規則將類型指定給datetime變量。如果datetime屬於日期間隔Type1,則類型爲Type1。相同的邏輯適用於Type2Type3如何將類型指定給日期時間變量

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。有什麼方法可以在Python 2.7中實現這個任務,而不需要使用大量的if then規則?

+1

坦率地說,我不明白那些「類型」 ......請澄清。 – deceze

+0

@deceze:如果'datetime'屬於'Type1'的日期間隔,那麼類型是'Type1'。 「Type2」和「Type3」也採用了相同的邏輯。 – Dinosaurius

+0

看到了,所以你只是想制定一些條件'如果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

然後,您不會存儲'日期'對象,但可能只是'(日,月)'元組,並且只需調整比較。 – deceze

+0

我照你的建議做了。比較過程如下:'如果date(dt.year,start(0),start(1))<= dt.date()<= date(dt.year,end(0),end(1)) :',但它給出錯誤,說開始和結束都是數字。如果我只是從類型中刪除'date',他們怎麼會是數字,所以他們應該是元組。 – Dinosaurius

相關問題