刘凡 9ff4d1d109 add S3,archive,truncate 2 роки тому
..
.github 9ff4d1d109 add S3,archive,truncate 2 роки тому
datetimerange 9ff4d1d109 add S3,archive,truncate 2 роки тому
docs 9ff4d1d109 add S3,archive,truncate 2 роки тому
examples 9ff4d1d109 add S3,archive,truncate 2 роки тому
requirements 9ff4d1d109 add S3,archive,truncate 2 роки тому
test 9ff4d1d109 add S3,archive,truncate 2 роки тому
.gitignore 9ff4d1d109 add S3,archive,truncate 2 роки тому
LICENSE 9ff4d1d109 add S3,archive,truncate 2 роки тому
MANIFEST.in 9ff4d1d109 add S3,archive,truncate 2 роки тому
Makefile 9ff4d1d109 add S3,archive,truncate 2 роки тому
README.rst 9ff4d1d109 add S3,archive,truncate 2 роки тому
pylama.ini 9ff4d1d109 add S3,archive,truncate 2 роки тому
pyproject.toml 9ff4d1d109 add S3,archive,truncate 2 роки тому
setup.py 9ff4d1d109 add S3,archive,truncate 2 роки тому
tox.ini 9ff4d1d109 add S3,archive,truncate 2 роки тому

README.rst

.. contents:: **DateTimeRange**
:backlinks: top
:depth: 2

Summary
=========
`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 `__

Installation
============

Installation: pip
------------------------------
::

pip install DateTimeRange


Installation: conda
------------------------------
::

conda install -c conda-forge dataproperty


Dependencies
============
- Python 3.6+
- `Python package dependencies (automatically installed) `__

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 `__