首页 > 解决方案 > 判断时间戳是否在 TimeDelta 列表范围内的 Python 函数

问题描述

我想编写一个下面的函数,它将检查 current_time 是否在任何部分内:A 或 B 或 C。在每个部分中,都有一个开始和结束时间。

is_in_market_hours(current_time: timestamp, open_hours:List[Tuple[Timedelta, Timedelta]]):
    pass 

A: Timedelta('0 days 09:00:00'), Timedelta('0 days 11:00:00')
B: Timedelta('0 days 13:00:00'), Timedelta('0 days 15:00:00')
C: Timedelta('0 days 22:00:00'), Timedelta('0 days 23:00:00')

例如,如果 current_time 是上午 9:15:55,那么它在 A 部分的范围内。该函数将返回 True。

我想我需要使用 current_time 来获取当前日期的开始,然后在每个部分中添加 Timedelta。然后我需要一个循环来遍历所有要比较的元组。

我在正确的轨道上吗?

标签: pythontimestamp

解决方案


使用 any() 的简单解决方案

   from datetime import datetime, time

   def is_in_market_hours(current_time, *time_ranges):
       return any(current_time > t[0] and current_time < t[1] for t in time_ranges)

   now = datetime.now().time()

   A = (time(9, 0), time(11, 0))
   B = (time(13, 0), time(15, 0))
   C = (time(22, 0), time(23, 0))

   is_in_market_hours(now, A, B, C)

推荐阅读