一个增强时间管理库

black-hole的Python项目详细描述


安装

可以:

easy_install black-hole

或者:

pip install black-hole

概览

blackhole(黑洞) 是一个增强的、友好的时间处理库,目的是为了解放程序员的生产力。 在python中有太多处理时间的库,datetime/date/time/calendar等等。需要记的细节太多,选择困难。 而blackhole就是解决这个的青霉素。从各种麻烦的转换中解脱出来。 只需记住 Blackhole对象ben()tslice()cronwalk() 这几个主要的api即可。

用法

在blackhole中,核心对象是 Blackhole对象

ben() 函数用来便捷获取Blackhole对象.:

不带参数默认是当前时间
>> ben()#shortcut of blackhole.now()
参数是时间戳
>> ben(timestamp)
参数是时间字符串
>> ben(timestr)
参数是datetime对象
>> ben(datetime)
参数是Blackhole对象
>> ben(blackhole)
显式指明格式
>> ben('2013-01-01','%Y-%m-%d')
datetime-like的构造器
>> ben(year=2013,month=2,day=8,hour=7)

也就是说,只要把能表达时间的东西塞给ben()就行了。 值得一说的是ben(timestr)中通过一个词法解析的东西,使得timestr可以很灵活。大体规则是,如果缺少年月日信息,则默认用当前时间的年月日;如果缺少时分秒信息,则默认是0:

>> ben('2013,1,1') == ben('2013-01,01') == ben('2013 1 01') == ben('2013-01-01 00:00:00')
True
>> ben('2013,1,1 19:23') == ben('2013-01-01 19:23:00')
True
>> now = datetime.now()
>> ben('19:23').year == now.year
True
>> ben('19:23').month == now.month
True
>> ben('19:23').day == now.day
True
>> ben('19:23').hour,ben('19:23').minute,ben('19:23').second
(19,23,0)

Blackhole对象 ,通过这个对象,可以方便的获取各个时间属性和操作:

>> bh = ben('2013,1,1 13:14:15')
>> bh
<blackhole object (2013-01-01 13:14:15)>
>> bh.year,bh.month,bh.day,bh.hour,bh.minute,bh.second,bh.microsecond
(2013, 1, 1, 13, 14, 15, 0)
>> bh.timestamp#还能直接获取timestamp
1357017255.0

#便捷的获取常用的sql格式
>> bh.sql
'2013-01-01 13:14:15'
>> bh.sqldate
'2013-01-01'
>> bh.sqltime
'13:14:15'

#进行增量变换(shift是原地操作,而shifted返回一个新的对象)
>> bh.shifted(day=1,minute=-2)
<blackhole object (2013-01-02 13:12:15)>
>> bh.hour=23
>> bh
<blackhole object (2013-01-01 23:14:15)>

>> bh.floor('hour'),bh.ceil('hour')
(<blackhole object (2013-01-01 23:00:00)>, <blackhole object (2013-01-01 23:59:59.999999)>)
>> bh.floor('year'),bh.ceil('year')
(<blackhole object (2013-01-01 00:00:00)>, <blackhole object (2013-12-31 23:59:59.999999)>)
>> bh.round(30*60)
<blackhole object (2013-01-01 23:00:00)>
>> bh.roundfloor(30*60)
<blackhole object (2013-01-01 23:00:00)>

#重载符号
>> bh3 = blackhole(year=2013,month=2,day=27,hour=0)
>> bh4 = blackhole(year=2013,month=3,day=1,hour=0)
>> bh3==bh4
False
>> bh3<bh4
True
>> bh3>bh4
False
>> bh4-bh3
datetime.timedelta(2)

#mock当前时间,这样就测试的时候就不用改时间,直接mock给当前时间加上个偏移量就行了
#比如我要把时间往后推一天
>> ben()
<blackhole object (2014-05-06 12:04:07.113000)>
>> blackhole.mock(day=1)
>> ben()
<blackhole object (2014-05-07 12:04:38.064000)>
>> ben()
<blackhole object (2014-05-07 12:04:44.319000)>
>> blackhole.unmock()
>> ben()
<blackhole object (2014-05-06 12:05:19.003000)>

#其它
>> bh
<blackhole object (2013-01-01 23:14:15)>
>> bh.raw()
datetime.datetime(2013, 1, 1, 23, 14, 15)
>> bh.clone()
<blackhole object (2013-01-01 23:14:15)>
>> bh.replace(day=2)
>> bh
<blackhole object (2013-01-02 23:14:15)>
>> bh.days_in_month
31
>> bh.is_today()
False
>> bh.is_past_date()
True
>> bh.is_future_date()
False
>> bh.strftime('%Y/%m/%d')
'2013/01/02'
>> blackhole.strptime('20130203','%Y%m%d')
<blackhole object (2013-02-03 00:00:00)>

tslice ,受内置函数xrange启发,用于获取一个时间序列。

格式是:

tslice(unit,start=None,end=None,step=1,count=None) -> generator of blackhole object
unit in ['year', 'month', 'day', 'hour', 'minute', 'second', 'microsecond']

跟xrange一样,step可以是负数。如果start为空,则默认是当前时间。

示例:

>> list(tslice('day','2013-01-01','2013-01-04'))
[<blackhole object (2013-01-01 00:00:00)>,
<blackhole object (2013-01-02 00:00:00)>,
<blackhole object (2013-01-03 00:00:00)>]

>> list(tslice('day','2013-01-04','2013-01-01',step=-1))
[<blackhole object (2013-01-04 00:00:00)>,
<blackhole object (2013-01-03 00:00:00)>,
<blackhole object (2013-01-02 00:00:00)>]

>> list(tslice('day','2013-01-04','2013-01-31',step=3,count=2))
[<blackhole object (2013-01-04 00:00:00)>,
<blackhole object (2013-01-07 00:00:00)>]

>> list(tslice('year',start='2013-01-04',count=2))
[<blackhole object (2013-01-04 00:00:00)>,
<blackhole object (2014-01-04 00:00:00)>]

>> list(tslice('minute',start='2013-01-04',count=2))
[<blackhole object (2013-01-04 00:00:00)>,
<blackhole object (2013-01-04 00:01:00)>]

cronwalk ,用于对crontab表达式进行演算,得到下一个执行的时间。

格式:

cronwalk(expr,base=None)# 如果base为空,默认是当前时间。

示例:

>> c = iter(cronwalk('0 6 * * *',base='2013-02-03'))
>> next(c)
<blackhole object (2013-02-03 06:00:00)>
>> next(c)
<blackhole object (2013-02-04 06:00:00)>

>> c = iter(cronwalk('0 23-7/2 * * *',base='2013-02-03 08:30:00'))
>> next(c)
<blackhole object (2013-02-03 23:00:00)>
>> next(c)
<blackhole object (2013-02-04 01:00:00)>

timediff ,用于计算距离下个指定时间还有多久,比如有个活动是每天20:00:00开始的,要计算距离活动开始还有多久:

>> timediff('20:00:00',factor=86400,base='19:30:00')
1800
>> timediff('20:00:00',factor=86400,base='21:30:00')
81000

Changelog

0.0.3

  • Initial release

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

推荐PyPI第三方库


热门话题
java Selenium用于返回错误组织。openqa。硒。WebDriverException:未知错误:无法确定加载状态   OS X Lion上的java Eclipse Indigo类型延迟   java设备上培训:无法创建解释器:Op内置代码超出范围:142。您是否将旧的TFLite二进制文件与较新的型号一起使用?   keylistener在java中通过键listener将光标移动到下一个文本字段   POM中的java错误。xml文件,即使在清理{users}/之后。m2/用于*上次更新文件的存储库   java如何防止Spring Boot/Tomcat(Java8)进程被OOMkilled?   java如何创建非辅助依赖关系?   java树集迭代的时间复杂度是多少?   LinuxPresto+如何将默认java版本设置为JDK11并验证presto是否真正使用了java11   sql server 2008换行转义序列在Java中没有以正确的方式回避   java如何使用不同类型的stream reduce?   java通过forloop有限地重新创建按钮   java Android:滚动包含recyclerView的子视图时如何滚动父视图   当响应大小较大时,来自Android的java HTTP POST不会返回数据   java Json数组作为对安卓客户端的响应   结合JavaSwing和Java3D:并发性的性能问题   java是否需要分别关闭每个嵌套的OutputStream和Writer?