基于时间/日期的抑制系统

时间:2013-08-02 07:48:57

标签: python datetime suppression

我们正在编写一个解析基于时间的事件的系统,我们想为这些事件实现一个抑制系统,我们可以为这些事件提供类似cron的语法来进行匹配。

e.g。抑制如果......

  1. ..该事件发生在该月的最后一个星期五
  2. ..活动发生在工作日下午4点至下午5点之间
  3. ..活动发生在星期天
  4. 等等。

    我们正在使用Python,所以我希望可能有一个模块来执行此类事情,但我的搜索技能让我失望(关于调度事件的很多结果,而我想要相反 - 当前时间匹配定义的时间表)。

    另外,如果有人对最佳存储方式和时间与时间表进行比较有任何建议,我很乐意从头开始编写。

    编辑:

    为了澄清,抑制时间表不是一成不变的,所以我不能简单地编写一个函数来处理特定情况。时间表需要存储在数据库中,并与事件相关联,因此我可以粗略地做:

    sql_rows = ..... "SELECT * FROM suppressions WHERE event_id = ?"
    
    for row in sql_rows:
        if matchesSchedule(current_time,row):
            print "This should be suppressed"
    

    所以我需要以一种可以存储在表格中的格式来表示日程安排,然后将列与当前时间组件进行匹配。

1 个答案:

答案 0 :(得分:0)

我建议您自己简单地实施时间模式检查。这很简单,就像使用datetime对象一样(如果你更喜欢那样,也可以使用time)。在Python语法中,你甚至可以表达诸如“分钟数,小时数和秒数之和为42”之类的内容,i。即使用类似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)