Python的时间跨度和服务程序助手
项目描述
>>> import datetime >>> from timelines import timespan, timelayer
时间跨度对象有一个开始时间和一个结束时间。它可以通过指定开始时间和经过时间或指定开始和结束时间来创建
>>> span1 = timespan(datetime.datetime(1984, 11, 26), datetime.timedelta(1)) >>> span2 = timespan(datetime.datetime(1984, 11, 26) + datetime.timedelta(2), datetime.datetime(1984, 11, 26) + datetime.timedelta(2, 50)) >>> span1.start datetime.datetime(1984, 11, 26, 0, 0) >>> span1.elapsed datetime.timedelta(1)
时间跨度的经过时间是它的开始时间和结束时间之间的timedelta
>>> span1.elapsed == span1.end - span1.start True
时间层对象是一系列有序的非重叠时间跨度,它们知道它们发生的顺序
>>> layer = timelayer(span2, span1) >>> list(layer) == [span1, span2] True
就像时间跨度一样,时间层知道自己的开始和结束时间
>>> layer.start == span1.start True >>> layer.end == span2.end True
时间层的经过持续时间是其包含的时间跨度的经过持续时间的总和,而不是它的开始和结束时间之间的delta
>>> layer.elapsed == span1.elapsed + span2.elapsed True >>> layer.elapsed == layer.end - layer.start False
您可以向时间层添加新的时间跨度
>>> layer.start datetime.datetime(1984, 11, 26, 0, 0) >>> layer.end datetime.datetime(1984, 11, 28, 0, 0, 50)
>>> layer.add(timespan(datetime.datetime(1984, 11, 26) - datetime.timedelta(1), datetime.timedelta(0, 600))) >>> layer.start datetime.datetime(1984, 11, 25, 0, 0) >>> layer.end datetime.datetime(1984, 11, 28, 0, 0, 50)
但是,您不能添加与新时间跨度重叠的现有时间跨度
>>> layer.add(timespan(datetime.datetime(1984, 11, 26) - datetime.timedelta(2), datetime.timedelta(2))) Traceback (most recent call last): ... RuntimeError: <timelayer datetime.datetime(1984, 11, 24, 0, 0) => datetime.datetime(1984, 11, 26, 0, 0) (contains 1 timespans)> overlaps <timespan datetime.datetime(1984, 11, 25, 0, 0) => datetime.datetime(1984, 11, 25, 0, 10)>
>>> layer.add(timespan(datetime.datetime(1984, 11, 26) - datetime.timedelta(1) + datetime.timedelta(0, 300), datetime.timedelta(0, 600))) Traceback (most recent call last): ... RuntimeError: <timelayer datetime.datetime(1984, 11, 25, 0, 5) => datetime.datetime(1984, 11, 25, 0, 15) (contains 1 timespans)> overlaps <timespan datetime.datetime(1984, 11, 25, 0, 0) => datetime.datetime(1984, 11, 25, 0, 10)>
>>> layer.add(timespan(datetime.datetime(1984, 11, 26) + datetime.timedelta(0, 300), datetime.timedelta(0, 1200))) Traceback (most recent call last): ... RuntimeError: <timelayer datetime.datetime(1984, 11, 26, 0, 5) => datetime.datetime(1984, 11, 26, 0, 25) (contains 1 timespans)> overlaps <timespan datetime.datetime(1984, 11, 26, 0, 0) => datetime.datetime(1984, 11, 27, 0, 0)>
您还可以向时间层添加约束。约束允许您冻结时间层的开始时间或结束时间,或者对层的总经过时间设置上限。如果新的时间跨度未能通过其约束,则不能将其添加到层中
>>> layer.freeze_start() >>> layer.add(timespan(datetime.datetime(1984, 11, 26) - datetime.timedelta(4), datetime.timedelta(2))) Traceback (most recent call last): ... RuntimeError: datetime.datetime(1984, 11, 22, 0, 0) is earlier than frozen start datetime.datetime(1984, 11, 25, 0, 0)
>>> layer.freeze_elapsed(datetime.timedelta(3)) >>> layer.add(timespan(datetime.datetime(1985, 11, 26), datetime.datetime(1985, 11, 29))) Traceback (most recent call last): ... RuntimeError: Total elapsed time datetime.timedelta(4, 650) is greater than frozen allowed elapsed time datetime.timedelta(3)
>>> layer.freeze_end(datetime.datetime(1985, 11, 27)) >>> layer.add(timespan(datetime.datetime(1985, 11, 26, 23), datetime.datetime(1985, 11, 27, 1))) Traceback (most recent call last): ... RuntimeError: datetime.datetime(1985, 11, 27, 1, 0) is later than frozen end datetime.datetime(1985, 11, 27, 0, 0)
变更日志
0.2 (2012-06-15)
实现timelayer.freeze_elapsed约束,允许用户将层的总允许经过时间限制为给定的timedelta
通过实现timespan.__cmp___修复timelayers的有保证排序问题
通过独立检查现有层中的每个时间跨度的冲突,而不是只检查层边界,修复timelayer.add中的碰撞检测问题
timelayer.add期间的异常现在提供了更多有关操作失败原因的信息
0.1 (2012-06-13)
初始发布,一切皆新!
关闭
timelines-0.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 817b9456604106522ab87a69a4072add006ca20789ee71478a9cb685012fe016 |
|
MD5 | 025a194fda70ddaea54b1619d8564572 |
|
BLAKE2b-256 | 2ce3184a2264728c2de4a93ce8c18c7c7df9bfc69b831b92d61194735a5ba2cd |