2016-03-25 5 views
0

時間の分だけ時間を分単位でフィルタしたいと思います。時間と分でフィルタする

たとえば、今の場合にtrueを返す関数は、その日の9.15から11.20の間です。

私はdatetimeを試しましたが、分は少し複雑です。

#!/usr/bin/python 

import datetime 

n = datetime.datetime.now() 
sta = datetime.time(19,18) 
sto = datetime.time(20,19) 

if sta.hour <= n.hour and n.hour <= sto.hour: 
     if sta.minute <= n.minute and sto.minute <= n.minute: 
       print str(n.hour) + ":" + str(n.minute) 

どのような方法が最適ですか?

よろしく

+1

これまでに試したことのコードを投稿してください。 –

+0

@TomDalton投稿されたコードはあなたを助けることができますか? – carbeman

答えて

2

あなたはかなり簡単に任意の部分区間の比較を行うためにタプルの比較を使用することができます。

>>> def f(dt): 
...  return (9, 15) <= (dt.hour, dt.minute) < (11, 21) 
... 
>>> d = datetime.datetime.now() 
>>> str(d) 
'2016-03-25 09:50:51.782718' 
>>> f(d) 
True 
>>> f(d + datetime.timedelta(hours=2) 
False 

これは、いずれかを受け入れます9:15:00.000000から11:20:59.999999までの時間を持つ日時です。


上記の方法は、たとえば毎時5分の最初の分を確認する必要がある場合にも機能します。時間帯の一部を取得するには.time()を使用し、これを制限値と比較するのがより簡単かもしれません。以下は、9:15:00.000000から11:20:00.000000までの間に受け入れます。

>>> def f(dt): 
...  return datetime.time(9, 15) <= dt.time() <= datetime.time(11, 20) 
+0

私は最初の方が好きです。なぜなら比較では経過秒数を無視できるからです。 – carbeman

0

あなたはコンバインクラスのメソッドを使用する必要があります:

import datetime 

def between(): 
    now = datetime.datetime.now() 
    start = datetime.datetime.combine(now.date(), datetime.time(9, 15)) 
    end = datetime.datetime.combine(now.date(), datetime.time(11, 20)) 
    return start <= now < end 
関連する問題