0

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

例如抑制如果...

  1. ..事件发生在每月的最后一个星期五
  2. .. 事件发生在工作日下午 4 点到 5 点之间
  3. ..事件发生在星期天

等等。

我们正在使用 Python,所以我希望可能有一个模块来做这类事情,但我的搜索技巧让我失望(很多关于安排事件的结果,而我想要相反的 - 当前时间是否与定义的时间匹配日程)。

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

编辑:

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

sql_rows = ..... "SELECT * FROM suppressions WHERE event_id = ?"

for row in sql_rows:
    if matchesSchedule(current_time,row):
        print "This should be suppressed"

因此,我需要以可以存储在表格中的格式来表示时间表,然后将列与当前时间组件进行匹配。

4

1 回答 1

0

我建议自己简单地实现您的时间模式检查器。使用对象之类的东西非常简单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)
于 2013-08-02T08:54:39.690 回答