为python dateutil添加工作日逻辑和改进的数据类型灵活性。

bdateutil的Python项目详细描述


将业务日逻辑和改进的数据类型灵活性添加到Python DATUTIL。 100%向后兼容python dateutil,只需替换dateutil 使用bdateutil导入。

http://img.shields.io/travis/ryanss/bdateutil.svghttp://img.shields.io/coveralls/ryanss/bdateutil.svg

示例用法

# 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在整个项目和 一切都将继续运行,但您可以访问 以下附加功能:

  1. 使用时,可以使用新的可选关键字参数bdays relativeDelta向DateTime对象添加或删除时间。
>>>date(2014,1,1)+relativedelta(bdays=+5)date(2014,1,8)
  1. 当将两个datetime参数传递给relativeDelta时,结果是 relativeDelta对象将包含一个带有数字的bdays属性 日期时间参数之间的工作日。
>>>relativedelta(date(2014,7,7),date(2014,7,3))relativedelta(days=+4,bdays=+2)
  1. 另一个新的可选关键字参数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)
  1. 一个新函数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
  1. 除了datetimedate类型之外,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)
  1. 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()))
  1. 可以使用导入快捷方式来导入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

贡献

IssuesPull Requests总是受欢迎的。

许可证

代码和文档根据麻省理工学院的许可证提供 (见LICENSE)。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Spring AOP:在方法之间交换信息   数组Java将字符串转换为字符[]   堆内存java。lang.OutOfMemoryError:PermGen space+java   安卓 Java。lang.ClassCastException:无法将活动强制转换到接口   java尝试使用气泡排序将随机整数数组从最大到最小排序   线程“main”java中的indexoutofboundsexception异常。lang.ArrayIndexOutofBounds异常:发电机处为3。main(Generator.java:35)   java“宽大”有什么用?   java SimpleCaptcha NoSuchMethodError   java在哪里部署Web服务的jar依赖项?   Java8获取列表中连续数字的函数方法   java为什么JWT令牌不安全?   java Uber API:在请求或发出令牌时指定多个作用域会返回无效的请求参数   java如何使用映射器从包含多个引用单元的JSON字符串中获取对象列表?   java警告匿名子类(?)没有串行版本   Jackson 2.9.0中的java JsonGenerationException。pr1   java试图打印多个catch语句   java如何创建一个sql表并获得每个唯一字段的平均价格?   java为什么SetMinimumSize设置最小高度而不是宽度?   java与使用POI合并的混淆   java在Xpath中使用“AND”和“normalizespace”时在不同浏览器中遇到不同的错误