根据用简单语法表示的时间段测试日期/时间
timeswitch的Python项目详细描述
时间开关允许根据时间范围测试日期,以查看它们是否 包含在时间范围内。时间范围用 支持绝对日期和时间的简单语法,重复 句点,大于、小于、介于和精确匹配比较,以及 括号和中缀符号逻辑运算符的组合。
时间由以下有序的组件组成,具有合理的 省略时组件的默认值:
- year:值为1-9999的范围表达式
- month:带整数值1-12或大小写的范围表达式 麻木的一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月, 十二月
- day:包含整数值1-31或大小写的范围表达式 迟钝的周一,周二,周三,周四,周五,周六,周日。与一个月一起使用时 工作日具有可选的序号1、2、3、4或5前缀 表示该月的第n个工作日
- hour minute:包含两个由分隔的整数值的范围表达式 冒号0-23:0-59
- 复合:具有全部或部分非二义性的范围表达式 年-月-日-小时-分钟值的序列
如果 必须使用api。
时间范围表达式类似于python数组语法:
- -是任何值
- x是一个值=x
- x-y是一个x≤value≤y的值。注意:
- -两边的表达式必须指定相同的 最右边的元素,例如2017 jan - febnot 2017 jan - feb 12
- 右手边的重复周期必须与或相同 比第一个更频繁,例如jan - 2017 feb无效
- 对于工作日范围,周一被视为一周的开始
- -x是小于或等于x的值
- x-是一个大于或等于x的值
时间范围表达式可以使用and,or,^{tt12}组合$ 和( )形成嵌套表达式。
空字符串总是关闭的。破折号始终打开:
-
始终从2017年4月3日凌晨1:30开始:
2017 apr 3 1:30 -
总是在2017年4月3日当天或之后的每个星期五(年和月 可以省略,因为“fri”是一个明确的工作日:
fri and 2017 apr 3 -
总是在每月的第一个星期五4月3日或之后 2017年:
1st fri and 2017 apr 3 -
总是在每月的第一个或第三个星期五 2017年4月:
(1st fri or 3rd fri) and 2017 apr 3 -
每月的第一个星期五下午6:30到9:50:
1st fri 18:30-21:50
感恩节、圣诞节、节礼日和元旦:
nov 4th thu or dec 25 or dec 26 or jan 1
正常运算符优先级为not,and,or。括号可以 用于更改此:
not((jun or aug) and 2017)
用法
时间开关的命令行接口可用:
$ timeswitch usage: timeswitch [-h][-d][-w][-y][-a][-p] expression [date] timeswitch: error: too few arguments $ timeswitch "2017 jan 20 -" on $ echo$?0 $ timeswitch "1972 dec 5 - 1975 nov 11" off $ echo$?1 $
--year、--week和--day选项提供了帮助 开发和调试时间开关表达式时的可视化。
在python中直接使用库:
fromtimeswitchimporttimeswitchfromdatetimeimportdatetimets=timeswitch('2017 may 4 20:20 - 20:30')printts(datetime(2017,5,4,20,21))# Trueprintts(datetime(2017,5,4,20,31))# False
timeswitch()接受名为months,weekdays和 ordinal个参数。每一个都是可选的文本字符串数组 在分析相应的日期部分时使用,例如,如果需要 写“第一个星期三”而不是“第一个星期三”:
ts=timeswitch('first wed',ordinals='first second third fourth fifth'.split(' '))
贡献
您可以通过在项目中记录问题来为项目做出贡献 发布跟踪程序或提交请求。
发展
开发环境可以这样设置:
git clone https://bitbucket.org/rocketboots/timeswitch.git cd timeswitch pip install -e .[test] python setup.py nosetests
贡献应该包括通过单元测试。
PYPI注册
为了支持pypi所期望的structuredtext,本文将 自动转换,前提是Pandoc 已安装程序包。在OS X上,
brew install pandoc pip install pypandoc twine python setup.py sdist twine register dist/timeswitch-*.tar.gz