为python dateutil添加工作日逻辑和改进的数据类型灵活性。
bdateutil的Python项目详细描述
将业务日逻辑和改进的数据类型灵活性添加到Python DATUTIL。
100%向后兼容python dateutil,只需替换dateutil
使用bdateutil
导入。
示例用法
# Test if a date is a business day>>>frombdateutilimportisbday>>>isbday(date(2014,1,1))True# Date parameters are no longer limited to datetime objects>>>isbday("2014-01-01")True>>>isbday("1/1/2014")True>>>isbday(1388577600)# Unix timestamp = Jan 1, 2014True# Take into account U.S. statutory holidays>>>importholidays>>>isbday("2014-01-01",holidays=holidays.US())False# Increment date by two business days>>>frombdateutilimportrelativedelta>>>date(2014,7,3)+relativedelta(bdays=+2)datetime.date(2014,7,7)# Any arguments that take a date/datetime object now accept# strings/unicode/bytes in any encoding and integer/float timestamps.# All dateutil functions now also take an optional `holidays` argument# for helping to work with business days.>>>"2014-07-03"+relativedelta(bdays=+2,holidays=holidays.US())datetime.date(2014,7,8)# Determine how many business days between two dates>>>relativedelta("2014-07-07",date(2014,7,3))relativedelta(days=+4,bdays=+2)# Take into account Canadian statutory holidays>>>fromholidaysimportCanada>>>relativedelta('2014-07-07','07/03/2014',holidays=Canada())relativedelta(days=+4,bdays=+1)# Get a list of the next 10 business days starting 2014-01-01>>>frombdateutilimportrrule,BDAILY>>>list(rrule(BDAILY,count=10,dtstart=date(2014,1,1)))# Take into account British Columbia, Canada statutory holidays>>>list(rrule(BDAILY,count=10,dtstart=date(2014,1,1),holidays=Canada(prov='BC')))
安装
最新的稳定版本始终可以通过pip安装或更新:
$ pip install bdateutil
如果上述操作失败,请改用Easy_安装:
$ easy_install bdateutil
文档
本节仅概述bdateutil的附加功能。为了 关于python dateutil提供的特性的完整文档请参见 文档位于https://labix.org/python-dateutil。
bdateutil与python dateutil完全向后兼容。你可以替换
dateutil
在整个项目和
一切都将继续运行,但您可以访问
以下附加功能:
- 使用时,可以使用新的可选关键字参数
bdays
relativeDelta向DateTime对象添加或删除时间。
>>>date(2014,1,1)+relativedelta(bdays=+5)date(2014,1,8)
- 当将两个datetime参数传递给relativeDelta时,结果是
relativeDelta对象将包含一个带有数字的
bdays
属性 日期时间参数之间的工作日。
>>>relativedelta(date(2014,7,7),date(2014,7,3))relativedelta(days=+4,bdays=+2)
- 另一个新的可选关键字参数
holidays
在以下情况下可用 使用relativeDelta支持bdays
功能。没有假期 工作日仅使用工作日计算。通过传递 节假日更准确和有用的工作日计算可以是 执行。python包holidays.py
作为 bdateutil的需求,这是生成 假期。
>>>frombdateutilimportrelativedelta>>>fromholidaysimportUnitedStates>>>date(2014,7,3)+relativedelta(bdays=+2)datetime.date(2014,7,7)>>>date(2014,7,3)+relativedelta(bdays=+2,holidays=UnitedStates())datetime.date(2014,7,8)
- 一个新函数
isbday
,如果参数 如果是周末或 假期。option关键字参数holidays
增加了 考虑到一组特定的假期。
>>>frombdateutilimportisbday>>>isbday(date(2014,1,1))True>>>isbday("2014-01-01")True>>>isbday("1/1/2014")True>>>isbday(1388577600)# Unix timestamp = Jan 1, 2014True# Take into account U.S. statutory holidays>>>importholidays>>>isbday("2014-01-01",holidays=holidays.US())False
- 除了
datetime
和date
类型之外,relativeDelta还可以工作 所有字符串/字节,不考虑编码和整数/浮点时间戳。 它通过在parse
函数被修改为接受许多不同的 类型多于字符串,包括日期/日期时间 修改。这允许您对对象调用parse(dt)
不考虑类型,并确保返回DateTime对象。
>>>parse(date(2014,1,1))datetime.date(2014,1,1)>>>parse(datetime(2014,1,1))datetime.datetime(2014,1,1,0,0)>>>parse("2014-01-01")datetime.datetime(2014,1,1,0,0)>>>parse("1/1/2014")datetime.datetime(2014,1,1,0,0)>>>parse(1388577600)datetime.datetime(2014,1,1,0,0)>>>relativedelta('2014-07-07','2014-07-03')relativedelta(days=+4,bdays=+2)>>>1388577600+relativedelta(days=+2)date(2014,1,3)
rrule
特性有一个新的BDAILY
选项用作freq
参数。 这将创建一个生成工作日的生成器。瑞尔现在也会 接受影响BDAILY
仅限频率。现有的^ {< CD23>}和^ {CD24}} 数组现在可以作为任何类似日期/日期时间的类型传递。
# Get a list of the next 10 business days starting 2014-01-01>>>frombdateutilimportrrule,BDAILY>>>list(rrule(BDAILY,count=10,dtstart=date(2014,1,1)))# Get a list of all business days in January 2014, taking into account# Canadian statutory holidays>>>importholidays>>>list(rrule(BDAILY,dtstart="2014-01-01",until="2014-01-31",holidays=holidays.Canada()))
- 可以使用导入快捷方式来导入bdateutil特性 比python dateutil简单一点。但是,从bdateutil导入时使用 python dateutil使用的longer方法仍然可以保持100% 向后兼容。
>>># Importing relativedelta from the original python-dateutil package>>>fromdateutil.relativedeltaimportrelativedelta>>># This method works with bdateutil>>>frombdateutil.relativedeltaimportrelativedelta>>># bdateutil also provides an easier way>>>frombdateutilimportrelativedelta
开发版本
最新的开发版本可以直接从github安装:
$ pip install --upgrade https://github.com/ryanss/bdateutil/tarball/master
运行测试
$ pip install flake8
$ flake8 bdateutil/*.py tests.py --ignore=F401,F403
$ python tests.py
覆盖范围
$ pip install coverage
$ coverage run --omit=*site-packages* tests.py
$ coverage report
贡献
Issues和Pull Requests总是受欢迎的。
许可证
代码和文档根据麻省理工学院的许可证提供 (见LICENSE)。