Kronos

PyPI - Version PyPI - Python Version Tests Codecov Read the Docs PyPI - License

Black pre-commit

Kronos makes dateranges easier.


Quickstart


Install from pip:

pip install kronos-daterange

Import & basic init:

from kronos import Kronos

kronos = Kronos(start_date='2022-01-01', end_date='2022-01-31')

Feature Demo


# import
from kronos import Kronos

# init --> defaults to range of <yesterday, today> unless otherwise specified by `KRONOS_DATERANGE` environment variable
kronos = Kronos()

# manually set dates
kronos = Kronos(start_date='2022-10-17', end_date='2022-10-23')

# set timezone
kronos = Kronos(timezone='America/New_York') 

# specify date format
kronos = Kronos(start_date='10/20/2022', end_date='10/31/2022', date_format='%m/%d/%Y')

# access start, end dates
kronos = Kronos()
kronos.start_date
# 2022-10-19
kronos.end_date
# 2022-10-20

# `date_format` carries over to properties:
kronos = Kronos(date_format='%m/%d/%Y')
kronos.start_date
# 10/19/2022
kronos.end_date
# 10/20/2022

# format start and end date with new format
kronos.format_start('%Y-%m-%d %H:%M:%S')
# 2022-10-20 00:00:00
kronos.format_end('%Y-%m-%d %H:%M:%S')
# 2022-10-21 23:59:59

# get the current date in specified timezone
kronos = Kronos('America/Los_Angeles')
kronos.current_date
# 2022-10-20
kronos = Kronos('America/Los_Angeles', date_format='%m/%d/%Y')
kronos.current_date
# 10/20/2022

# overwrite your object's timezone without altering the time
kronos = Kronos(timezone='UTC')
kronos.change_timezone(tz='America/New_York')

# relative shift forward/back
kronos = Kronos()
kronos.shift_range(weeks=-1)  # pipes kwargs into timedelta
# Kronos(start_date='2022-10-12', end_date='2022-10-13', ... )

# pass start and end dates as datetime objects
start_dt = datetime(2023, 3, 8, 12, 0, 0)
end_dt = datetime(2023, 3, 9, 12, 0, 0)
kronos = Kronos(start_dt, end_dt)
kronos.format_start('%Y-%m-%d %H:%M:%S')
# 2023-03-08 12:00:00
kronos.format_end('%Y-%m-%d %H:%M:%S')
# 2023-03-09 12:00:00

# bisect a daterange
kronos = Kronos('2023-03-01', '2023-03-09')
k1, k2 = kronos.splice('2023-03-04')
print(k1)
# Kronos(start_date='2023-03-01', end_date='2023-03-04', ...) 
print(k2)
# Kronos(start_date='2023-03-04', end_date='2023-03-09', ...)

Defaults/Environment Variables


Kronos is prepared to accept the following environment variables:

  • KRONOS_TIMEZONE, which defaults to UTC if not set. Can often be overridden at method-levels for one-off timezone conversions.

  • KRONOS_FORMAT, the strptime date format string for your dates.

  • KRONOS_DATERANGE (see below)

Note that both KRONOS_TIMEZONE and KRONOS_FORMAT can be set during init as timezone= and date_format= arguments, respectively.

KRONOS_TIMEZONE:

Can be any valid timezone name (find them at pytz.all_timezones)

KRONOS_DATERANGE:

List of accepted values:

  • LATEST: start/end dates of yesterady/today

  • YESTERDAY_TODAY: same as LATEST

  • LAST_MONTH: previous calendar month

  • MTD: month-to-date

  • LAST_{X}_DAYS: relative range where end_date is today, start date is set X days behind.

  • THIS_WEEK__{X}: week-to-date starting on previous day of week specified by X. Valid values for X: SUN, MON, TUES, WED, THURS, FRI, SAT


Credits


This package was created with Cookiecutter and the fedejaure/cookiecutter-modern-pypackage project template.