Skip to main content

针对以简单语法表示的时间段测试日期/时间

项目描述

Timeswitch 允许根据时间范围测试日期,以查看它们是否包含在时间范围内。时间范围使用支持绝对日期和时间、重复句点、大于、小于、介于和精确匹配比较以及括号和中缀符号逻辑运算符的组合的简单语法表示。

时间由以下有序组件组成,省略时组件具有合理的默认值:

  • 年份:范围表达式,值为 1-9999

  • 月份:整数值 1-12 或不区分大小写的范围表达式 jan、feb、mar、apr、may、jun、jul、aug、sep、oct、nov、dec

  • 日:整数值 1-31 或不区分大小写的范围表达式 mon、tue、wed、thu、fri、sat、sun。当与一个月一起使用时,工作日有一个可选的序数 1st、2nd、3rd、4th 或 5th 前缀来表示该月的第 n 个工作日

  • 小时-分钟:范围表达式,两个整数值用冒号分隔 0-23:0-59

  • 复合:具有年月日时分值的全部或部分非模糊序列的范围表达式

如有必要,可以使用 API 覆盖预期的月份、工作日和序号字符串。

时间范围表达式类似于 Python 数组语法:

  • -是任何值

  • x是一个值 = x

  • xy是值 x ≤ 值 ≤ y。注意:

    • -两边的表达式必须指定相同的最右边元素,例如2017 jan - feb而不是 2017 jan - feb 12

    • 右侧的重复周期必须与第一个相同或更频繁,例如 1月 - 2017 年 2 月无效

    • 对于工作日范围,星期一被视为一周的开始

  • -x是小于或等于 x 的值

  • x-是大于或等于 x 的值

时间范围表达式可以使用andornot( )组合以形成嵌套表达式。

空字符串始终处于关闭状态。破折号始终开启:

-

从 2017 年 4 月 3 日凌晨 1:30 开始始终开启:

2017 年 4 月 3 日 1:30 -

总是在 2017 年 4 月 3 日或之后的每个星期五(年份和月份可以省略,因为 'fri' 明确表示工作日):

周五和 2017 年 4 月 3 日 -

始终在 2017 年 4 月 3 日或之后每月的第一个星期五:

2017 年 4 月 3 日和第 1 周五 -

始终在 2017 年 4 月 3 日或之后每月的第一个或第三个星期五:

(第 1 个星期五或第 3 个星期五)和 2017 年 4 月 3 日 -

每月第一个星期五下午 6:30 至晚上 9:50:

第一个周五18:30-21:50

感恩节、圣诞节、节礼日和元旦:

11 月 4 日 星期四 或 12 月 25 日 或 12 月 26 日 或 1 月 1 日

正常运算符优先级不是,, or。括号可以用来改变这个:

不是(( 6 月或 8 月)和 2017 年)

用法

timeswitch 的命令行界面可用:

$ 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选项在开发和调试 timeswitch 表达式时提供了有用的可视化

要直接在 Python 中使用该库:

from timeswitch import timeswitch
from datetime import datetime

ts = timeswitch('2017 may 4 20:20 - 20:30')
print ts(datetime(2017, 5, 4, 20, 21))  # True
print ts(datetime(2017, 5, 4, 20, 31))  # False

timeswitch()接受可选的命名月份工作日序数参数。每个都是解析相应日期部分时使用的替代文字字符串数组,例如,如果你想写 'first wed' 而不是 '1st wed':

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 期望的 reStructuredText,如果安装了Pandoc 包,此文档会自动转换。在 OS X 上,

brew install pandoc
pip install pypandoc twine
python setup.py sdist
twine register dist/timeswitch-*.tar.gz

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

timeswitch-1.0.1.tar.gz (11.6 kB 查看哈希)

已上传 source

内置分布

timeswitch-1.0.1-py2.py3-none-any.whl (14.7 kB 查看哈希

已上传 py2 py3