123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- .. contents:: **DateTimeRange**
- :backlinks: top
- :depth: 2
- Summary
- =========
- `DateTimeRange <https://github.com/thombashi/DateTimeRange>`__ is a Python library to handle a time range. e.g. check whether a time is within the time range, get the intersection of time ranges, truncating a time range, iterate through a time range, and so forth.
- .. image:: https://badge.fury.io/py/DateTimeRange.svg
- :target: https://badge.fury.io/py/DateTimeRange
- :alt: PyPI package version
- .. image:: https://anaconda.org/conda-forge/datetimerange/badges/version.svg
- :target: https://anaconda.org/conda-forge/datetimerange
- :alt: conda-forge package version
- .. image:: https://img.shields.io/pypi/pyversions/DateTimeRange.svg
- :target: https://pypi.org/project/DateTimeRange
- :alt: Supported Python versions
- .. image:: https://github.com/thombashi/DateTimeRange/workflows/Tests/badge.svg
- :target: https://github.com/thombashi/DateTimeRange/actions/workflows/tests.yml
- :alt: Test result of Linux/macOS/Windows
- .. image:: https://coveralls.io/repos/github/thombashi/DateTimeRange/badge.svg?branch=master
- :target: https://coveralls.io/github/thombashi/DateTimeRange?branch=master
- :alt: Test coverage
- .. image:: https://github.com/thombashi/DateTimeRange/actions/workflows/codeql-analysis.yml/badge.svg
- :target: https://github.com/thombashi/DateTimeRange/actions/workflows/codeql-analysis.yml
- :alt: CodeQL
- .. image:: https://img.shields.io/github/stars/thombashi/DateTimeRange.svg?style=social&label=Star
- :target: https://github.com/thombashi/DateTimeRange
- :alt: GitHub stars
- Examples
- ==========
- Create a DateTimeRange instance from start and end datetime
- -----------------------------------------------------------------
- :Sample Code:
- .. code:: python
- from datetimerange import DateTimeRange
- time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
- str(time_range)
- :Output:
- ::
- '2015-03-22T10:00:00+0900 - 2015-03-22T10:10:00+0900'
- Create a DateTimeRange instance from a range text
- -----------------------------------------------------------------
- :Sample Code:
- .. code:: python
- from datetimerange import DateTimeRange
- time_range = DateTimeRange.from_range_text("2015-03-22T10:00:00+0900 - 2015-03-22T10:10:00+0900")
- str(time_range)
- :Output:
- ::
- '2015-03-22T10:00:00+0900 - 2015-03-22T10:10:00+0900'
- Get an iterator
- ------------------------
- :Sample Code 1:
- .. code:: python
- import datetime
- from datetimerange import DateTimeRange
- time_range = DateTimeRange("2015-01-01T00:00:00+0900", "2015-01-04T00:00:00+0900")
- for value in time_range.range(datetime.timedelta(days=1)):
- print(value)
- :Output 1:
- ::
- 2015-01-01 00:00:00+09:00
- 2015-01-02 00:00:00+09:00
- 2015-01-03 00:00:00+09:00
- 2015-01-04 00:00:00+09:00
- :Sample Code 2:
- .. code:: python
- from datetimerange import DateTimeRange
- from dateutil.relativedelta import relativedelta
- time_range = DateTimeRange("2015-01-01T00:00:00+0900", "2016-01-01T00:00:00+0900")
- for value in time_range.range(relativedelta(months=+4)):
- print(value)
- :Output 2:
- ::
- 2015-01-01 00:00:00+09:00
- 2015-05-01 00:00:00+09:00
- 2015-09-01 00:00:00+09:00
- 2016-01-01 00:00:00+09:00
- Test whether a value within the time range
- ------------------------------------------
- :Sample Code:
- .. code:: python
- from datetimerange import DateTimeRange
- time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
- print("2015-03-22T10:05:00+0900" in time_range)
- print("2015-03-22T10:15:00+0900" in time_range)
- time_range_smaller = DateTimeRange("2015-03-22T10:03:00+0900", "2015-03-22T10:07:00+0900")
- print(time_range_smaller in time_range)
- :Output:
- ::
- True
- False
- True
- Test whether a value intersect the time range
- ---------------------------------------------
- :Sample Code:
- .. code:: python
- from datetimerange import DateTimeRange
- time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
- x = DateTimeRange("2015-03-22T10:05:00+0900", "2015-03-22T10:15:00+0900")
- time_range.is_intersection(x)
- :Output:
- ::
- True
- Make an intersected time range
- ------------------------------
- :Sample Code:
- .. code:: python
- from datetimerange import DateTimeRange
- time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
- x = DateTimeRange("2015-03-22T10:05:00+0900", "2015-03-22T10:15:00+0900")
- time_range.intersection(x)
- :Output:
- ::
- 2015-03-22T10:05:00+0900 - 2015-03-22T10:10:00+0900
- Make an encompassed time range
- ------------------------------
- :Sample Code:
- .. code:: python
- from datetimerange import DateTimeRange
- time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
- x = DateTimeRange("2015-03-22T10:05:00+0900", "2015-03-22T10:15:00+0900")
- time_range.encompass(x)
- :Output:
- ::
- 2015-03-22T10:00:00+0900 - 2015-03-22T10:15:00+0900
- Truncate time range
- -------------------
- :Sample Code:
- .. code:: python
- from datetimerange import DateTimeRange
- time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
- time_range.is_output_elapse = True
- print("before truncate: ", time_range)
- time_range.truncate(10)
- print("after truncate: ", time_range)
- :Output:
- ::
- before truncate: 2015-03-22T10:00:00+0900 - 2015-03-22T10:10:00+0900 (0:10:00)
- after truncate: 2015-03-22T10:00:30+0900 - 2015-03-22T10:09:30+0900 (0:09:00)
- For more information
- ----------------------
- More examples are available at
- https://datetimerange.rtfd.io/en/latest/pages/examples/index.html
- Examples with Jupyter Notebook is also available at `DateTimeRange.ipynb <https://nbviewer.jupyter.org/github/thombashi/DateTimeRange/tree/master/examples/DateTimeRange.ipynb>`__
- Installation
- ============
- Installation: pip
- ------------------------------
- ::
- pip install DateTimeRange
- Installation: conda
- ------------------------------
- ::
- conda install -c conda-forge dataproperty
- Dependencies
- ============
- - Python 3.6+
- - `Python package dependencies (automatically installed) <https://github.com/thombashi/DateTimeRange/network/dependencies>`__
- Documentation
- ===============
- https://datetimerange.rtfd.io/
- Sponsors
- ====================================
- .. image:: https://avatars.githubusercontent.com/u/3658062?s=48&v=4
- :target: https://github.com/b4tman
- :alt: Dmitry Belyaev (b4tman)
- .. image:: https://avatars.githubusercontent.com/u/44389260?s=48&u=6da7176e51ae2654bcfd22564772ef8a3bb22318&v=4
- :target: https://github.com/chasbecker
- :alt: Charles Becker (chasbecker)
- .. image:: https://avatars.githubusercontent.com/u/46711571?s=48&u=57687c0e02d5d6e8eeaf9177f7b7af4c9f275eb5&v=4
- :target: https://github.com/Arturi0
- :alt: Arturi0
- `Become a sponsor <https://github.com/sponsors/thombashi>`__
|