我想用一小时和几分钟来过滤一天的时刻。
例如,如果现在返回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 */});
最好的方法是什么?
此致
答案 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