提问人:mimic 提问时间:11/12/2023 最后编辑:mimic 更新时间:11/12/2023 访问量:31
如何计算当前一天是在持续时间为 N 小时的某个反复发生的事件之内还是之外?
How to calculate if a current day is inside or outside some recurrent event of duration of N hours?
问:
比如说,我有一个从 1:30 开始到 6:30 结束的事件(例如,它可以是任何时间)。该事件是反复发生的,也就是说,它正在重复。在此示例中,它每隔一天重复一次,但可以是 2、3 和任何其他数字。
我需要弄清楚给定的日期时间是否在任何此类插槽内。
比如说,11 月 16 日凌晨 4 点 17 分已经结束,但 11 月 17 日 4 点 17 分已经结束。
也许,有 Python 库可以做到这一点?或者有一些简单的方法来计算它?
使用 dateutil.rrule,我可能可以计算日期,但我不知道如何应用这些知识来解决任务。
所以它应该是这个签名的一个函数:
def inside_slot(start_datetime, end_datetime, interval, given_datetime):
'''
Returns True if the given_datetime inside of a recurring
slot, else False.
'''
pass
答:
0赞
user22685657
11/12/2023
#1
您可以使用 datetime 将给定的日期时间与事件的开始和结束时间进行比较,然后检查它是否属于任何重复的时间段。
下面是使用 datetime 的示例代码:
from datetime import datetime, timedelta
def is_in_recurring_slot(event_start_time, event_end_time, recurring_interval, given_time):
# Parse the given event start and end times as datetime objects
event_start = datetime.strptime(event_start_time, '%I:%M %p')
event_end = datetime.strptime(event_end_time, '%I:%M %p')
# Parse the given time as a datetime object
given_datetime = datetime.strptime(given_time, '%b %dth %I:%M %p')
# Calculate the duration of the event
event_duration = event_end - event_start
# Check if the given time is within any recurring slots
while event_start < given_datetime:
if given_datetime <= event_end:
return True
# Increment the start and end times using the recurring interval
event_start += timedelta(days=recurring_interval)
event_end = event_start + event_duration
# The given time is not within any recurring slots
return False
# Example usage
event_start_time = '1:30 PM'
event_end_time = '6:30 PM'
recurring_interval = 2
given_time = 'Nov 16th 4:17 AM'
is_in_slot = is_in_recurring_slot(event_start_time, event_end_time, recurring_interval, given_time)
print(f"Given time {given_time} is in recurring slot: {is_in_slot}")
请记住,您需要根据特定的日期和时间格式修改方法中的格式字符串。此外,您需要在给定时间在第一个定期插槽之前处理这种情况。strptime
评论