我们正在编写一个解析基于时间的事件的系统,我们希望为这些事件实现一个抑制系统,在该系统中,我们可以提供类似cron的语法来进行匹配。
例如抑制如果…
- 。。事件发生在本月的最后一个星期五
- 。。该活动发生在工作日下午4点到5点之间
- 。。活动在星期天举行
等等
我们使用Python,所以我希望有一个模块可以做这类事情,但我的搜索技能让我失望了(很多关于安排事件的结果,而我想要的恰恰相反——当前时间与定义的时间表匹配吗)。
或者,如果有人对存储时间和将时间与时间表进行比较的最佳方式有任何建议,我很乐意从头开始写。
编辑:
为了澄清,抑制时间表并不是一成不变的,所以我不能简单地编写一个函数来处理特定的情况。时间表需要存储在数据库中,并与事件绑定,所以我可以大致执行以下操作:
sql_rows = ..... "SELECT * FROM suppressions WHERE event_id = ?"
for row in sql_rows:
if matchesSchedule(current_time,row):
print "This should be suppressed"
因此,我需要用一种可以存储在表中的格式来表示时间表,然后将列与当前时间组件相匹配。
我建议自己简单地实现时间模式检查器。使用像datetime
对象这样的东西是非常直接的(如果你更喜欢的话,你也可以使用time
)。在Python语法中,你甚至可以表达"分钟、小时和秒的总和应该是42"之类的东西,也就是说,使用类似cron的模式是不可能的。
import datetime
def matchesTimePattern1(d):
return (
d.weekday() == 4 and # Friday?
d.month != (d + datetime.timedelta(7)).month # next week is different month?
)
def matchesTimePattern2(d):
return (
d.weekday() in (0, 1, 2, 3, 4) and # weekday?
d.hour == 16 # at 4pm (up to 4:59:59pm)
)
def matchesTimePattern3(d):
return (
d.weekday() == 6 # Sunday?
)
d = datetime.datetime.now()
print matchesTimePattern1(d)
print matchesTimePattern2(d)
print matchesTimePattern3(d)