Skip to main content

Calculation of time frames using the built-in datetime module

Project description

TimeFrame

linter tests codecov License Stars Downloads Open Issues Open PRs CodeClimate Maintainability CodeClimate Issues CodeClimate Tech Debt Contributors Version Python Wheel Repo Size Code Size

Introduction

This package makes the following calculations on datetime:

  • Adding two time frames, resulting in one bigger time frame or two disjoint one.
  • Multiplying two time frames, resuling in either an overlapped time frame or an empty one, depending on the two time frames.
  • Substracting two time frames, resuling in one or several time frames.

Install

Installing the package is as simple as running the following command inside your terminal:

pip install timeframe

Examples

NOTE: You can always take a look at the test cases in the tests directory to get a sense of how to use the package, but consider the below examples first, because it's fairly easy to use.

You need to import datetime as well as TimeFrame:

from datetime import datetime
from timeframe import TimeFrame

Inclusion

New API

>>> tf1 = TimeFrame(datetime(2021, 1, 1), datetime(2021, 1, 2))
>>> tf2 = TimeFrame(datetime(2021, 1, 1, 12), datetime(2021, 1, 1, 13))
>>> tf2 in tf1
True

Deprecated

This implies whether or not one time frame includes another; it can also be used to check if a datetime is inside one TimeFrame.

When you want to check if a datetime is inside a TimeFrame:

tf1 = TimeFrame(datetime(2021, 1, 26, 19), datetime(2021, 1, 26, 20))
tf1.includes(datetime(2021, 1, 26, 19, 30))
# output: True

When You want to check if an instance of TimeFrame is inside another one:

tf2 = TimeFrame(datetime(2021, 1, 26, 19, 30), datetime(2021, 1, 26, 19, 40))
tf1.includes(tf2)
# output: True
tf3 = TimeFrame(datetime(2021, 1, 26, 19, 45), datetime(2021, 1, 26, 21, 30))
tf1.includes(tf3)
# output: False

Duration

TimeFrame has a property named duration which can be used to retrieve the total amount of seconds that TimeFrame has:

tf1.duration
# output: 3600.0
tf2.duration
# output: 600.0
tf3.duration
# output: 6300.0

Comparison

You can always compare two TimeFrame to see if one is greater than the other or not. This comparison is based on the end of one TimeFrame and the start of the other.

tf1 > tf2
# output: False
tf3 > tf2
# output: True

You can also compare equality using either greater-equal sign, or a simple equal.

tf1 == tf2
# output: False
tf3 >= tf2
# output: True

Overlap

When you want to know how much two time frames have in common, use multiply sign:

tf1 * tf2
# output: 2021-01-26T19:30:00#2021-01-26T19:40:00
tf2 * tf3
# output: Empty TimeFrame

You can also check their duration as well:

(tf1 * tf2).duration
# output: 600.0
(tf2 * tf3).duration
# output: 0.0

Summation (union)

The summation sign is used to get the union of two time frames:

tf1 + tf2
# output: 2021-01-26T19:00:00#2021-01-26T20:00:00
(tf1 + tf2).duration
# output: 3600.0
tf1 + tf3
# output: 2021-01-26T19:00:00#2021-01-26T21:30:00
(tf1 + tf3).duration
# output: 9000.0

Minus

You can also substract one time frame from the other, which will ultimately result in either two disjoint time frames, or one unified time frame, depending on the time frames.

tf1 - tf2
# output:
# 2021-01-26T19:00:00#2021-01-26T19:29:59.999999
# 2021-01-26T19:40:00.000001#2021-01-26T20:00:00
(tf1 - tf2).duration
# output: 2999.999998

Substracting two disjoint time frames will return the first time frame as a result.

tf2 - tf3
# output: 2021-01-26T19:30:00#2021-01-26T19:40:00
(tf2 - tf3).duration
# output: 600.0
(tf2 - tf3) == tf2
# output: True

Acknowledgment

Thank you for showing interest in this package. Feel free to contact me if you feel like it. 🥂

Contribution

Any contribution of any size is greatly appreciated. Feel free to open a PR or issue in the github page at any time. 🤗

Stargazers over time

Star History Chart

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

timeframe-3.0.0.tar.gz (13.1 kB view details)

Uploaded Source

Built Distribution

timeframe-3.0.0-py3-none-any.whl (7.1 kB view details)

Uploaded Python 3

File details

Details for the file timeframe-3.0.0.tar.gz.

File metadata

  • Download URL: timeframe-3.0.0.tar.gz
  • Upload date:
  • Size: 13.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for timeframe-3.0.0.tar.gz
Algorithm Hash digest
SHA256 f5f22cfbfc015c9b2f3c19d1d9611b9bb305d766b830893074baef0d4ccbb6f5
MD5 22a62f8d6f48e88bee2405f443f24b47
BLAKE2b-256 e5bb605bb750a736f70bf2872ad173c5d390801ff5846c74cb5dda9ba8cb11a4

See more details on using hashes here.

File details

Details for the file timeframe-3.0.0-py3-none-any.whl.

File metadata

  • Download URL: timeframe-3.0.0-py3-none-any.whl
  • Upload date:
  • Size: 7.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for timeframe-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ac062fcad42d0fd368e3e07fc6c04b9e7924a5dda3b13fb693d527e4a35072c3
MD5 46e5536fb8718ef99d45e3bbabfb43ad
BLAKE2b-256 7db12ee9adcc7d2425097aa2f70b6cbd98e20ed8bc2dc3aaf2f49e46a87afbfd

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page