Skip to main content

Fixed calendar package

Project description

FixedCal

CI codecov GitHub

Python package for international fixed calendar dates.

What is that?

International fixed calendar is an alternative calendar system. It divides year into 13 even months by adding a month called Sol between June and July. Each month starts with Sunday and has exactly 28 days or 4 weeks. An additional year day is added to the end of the year and it does not belong to any of the months and has no weekday. You can read more about IFC on Wikipedia.

Installation

This package is available via PyPI:

pip install fixedcal

You can also download the package directly from releases.

Usage

Date initialization

from fixedcal import FixedDate

# Date of today
fixed_date = FixedDate.today()

# From native datetime
import datetime
february_seventh = datetime.date(2022, 2, 7)
fixed_date = FixedDate(february_seventh)

# From day's ordinal in year
fixed_date = FixedDate(day_of_year=107, year=2022)

Date's properties

from fixedcal import FixedDate
import datetime
fixed_date = FixedDate(datetime.date(2022, 8, 12))

fixed_date.date           # datetime.date(2022, 8, 12)
fixed_date.day_of_year    # 224
fixed_date.day_of_month   # 28
fixed_date.month          # 8
fixed_date.year           # 2022
fixed_date.is_year_day    # False
fixed_date.is_leap_day    # False
fixed_date.is_leap_year   # False
fixed_date.week_of_month  # 4
fixed_date.weekday        # 7
fixed_date.week_of_year   # 32
fixed_date.year_quarter   # 3

Date's operations

from fixedcal import FixedDate
from datetime import date, timedelta

fixed_date = FixedDate(date(2022, 12, 6))
jan_first = FixedDate(date(2023, 1, 1))

str(fixed_date)                       # 2022-13-04

new_fixed = fixed_date + timedelta(3) # FixedDate 3 days ahead
new_fixed = fixed_date - timedelta(2) # FixedDate 2 days before
new_fixed = jan_first - fixed_date    # timedelta between dates

fixed_date == fixed_date              # True
fixed_date != jan_first	              # True
jan_first < fixed_date                # False

Year day

Year day is the day after the last of December and before the first of January. For that date, FixedDate gives the following property values.

  • day_of_year = 365 (366 on leap years)
  • day_of_month = 29
  • month = 13
  • year is obviously the ending year
  • is_year_day = True
  • week_of_month = 4
  • weekday = None
  • week_of_year = 52
  • year_quarter = 4

Leap day

Leap day occurres on the same years as in Gregorian calendar. However, the placement of that day is different: after the last day of June and before the first day of Sol (17th June in Gregorian). The following properties are given by FixedDate for leap day:

  • day_of_year = 169
  • day_of_month = 29
  • month = 6
  • is_leap_day = True
  • is_leap_year = True
  • week_of_month = 4
  • weekday = None
  • week_of_year = 24
  • year_quarter = 2

Contributing

Yes, you can contribute in the development of this package. If you find a bug or have a feature request, please file an issue. You can also modify the code yourself and create a pull request.

You need Poetry to manage the development environment. After downloading the source code of this package, run poetry install to install development dependencies and to set up a compatible Python environment.

Please check the following topics before creating a pull request:

  • Your changes should not create new Pylint errors.
  • There should be proper unit tests included in the pull request. This consists of high branch coverage (>90%) and quality of the tests. Working with dates has a lot of corner cases and tests are the best way to avoid bugs.
  • The structure of the project should remain healthy: split the code between modules and packages.

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

fixedcal-1.0.0.tar.gz (6.1 kB view hashes)

Uploaded Source

Built Distribution

fixedcal-1.0.0-py3-none-any.whl (6.4 kB view hashes)

Uploaded Python 3

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