按小时和分钟过滤

时间:2016-03-25 07:43:40

标签: python datetime time

我想用一小时和几分钟来过滤一天的时刻。

例如,如果现在返回true的函数在当天的9.15和11.20之间。

我尝试使用日期时间但是分钟很复杂。

callAppointments
        .flatMapIterable(appointments -> appointments)
        .flatMap(app -> Observable.zip(
             app, 
             patientServiceRx.getService().getPatientById(app.patient_id),
             servicesRestRx.getService().getSubserviceById(app.subservice_id),
             (app, patient, subservice) -> this.createListItem(app, patient, subservice))
         .toList()
         .subscribeOn(Schedulers.io())
         .observeOn(AndroidSchedulers.mainThread())
         .subscribe(list -> {/*set adapter*/}, error -> {/* handle error */});

最好的方法是什么?

此致

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

您需要使用combine类方法:

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