This is a lightweight Python library for representing time and dates, with no restrictions on the year range. (Unlike the datetime library in CPython, which has a year range from 1 to 9999.) It also supports fuzzy dates, allowing for representation of uncertain times (i.e., you can specify only the year, month, or day). For example, it can represent dates like 1912, or March 1912, etc.
Project description
alldatetime
Introduction
This is a lightweight Python library for representing time and dates, with no restrictions on the year range. (Unlike the datetime library in CPython, which has a year range from 1 to 9999.) It also supports fuzzy dates, allowing for representation of uncertain times (i.e., you can specify only the year, month, or day). For example, it can represent dates like 1912, or March 1912, etc. Some parts of the code are referenced from CPython's datetime implementation.
Please NOTE that this library currently does not support time zones currently.
Installation
To install this library, run the following command:
pip install alldatetime
Types Overview
alldatetime.alldatetime.alldate
: A class used to represent dates.alldatetime.alldatetime.alltime
: A class used to represent time.alldatetime.alldatetime.alldatetime
: A class used to represent date and time.alldatetime.alldatetime.alldateperiod
: Used to represent a time interval by specifying a start time and an end time.alldatetime.fuzzydatetime.fuzzydate
: Used to represent a fuzzy date, such as the year 1950, or June 1950, etc.alldatetime.fuzzydatetime.fuzzydateperiod
: Used to represent a fuzzy date range, such as from 1950 to 1980, or from June 1950 to September 1950, etc.
alldate
alldate
is used to represent dates by specifying year, month and day.
Methods and Constructor
__init__(self, year: int, month: int, day: int)
Constructor of class alldate
.
year
: The year of the date. No limitation. Use negative numbers to represent years before the Common Era (BC).month
: The month of the date. Ranging from 1 to 12. A ValueError will be raised if month is out of range.day
: The day of the date. The range starts from 1 and goes up to the number of days in the specified month. A ValueError will be raised if month is out of range.
classmethod fromtimestamp(cls, timestamp: int)
Return an instance of alldate
corresponding to the POSIX timestamp.
timestamp
: POSIX timestamp.- Returns: An instance of
alldate
corresponding to the POSIX timestamp.
Example usage:
from alldatetime.alldatetime import alldate
ad = alldate.fromtimestamp(-111553804800)
print(ad) # -1566-01-01
fromordinal(cls, n: int)
Return an instance of alldate
from a modified version of proleptic Gregorian ordinal. Ordinal number 0 represents January 1, 1 AD not 1.
n
: Ordinal number. Ordinal number 0 represents January 1, 1 AD.- Returns: An instance of
alldate
corresponding to the ordinal number.
Example usage:
from alldatetime.alldatetime import alldate
date = alldate.fromordinal(0)
print(date) # 0001-01-01
date = alldate.fromordinal(-1)
print(date) # -0001-12-31
toordinal(self)
- Returns: A modified version of proleptic Gregorian ordinal. Ordinal number 0 represents January 1, 1 AD not 1.
Example usage:
from alldatetime.alldatetime import alldate
date = alldate(1, 1, 1)
ordinal = date.toordinal()
print(ordinal) # 0
date = alldate(-1, 12, 31)
ordinal = date.toordinal()
print(ordinal) # -1
weekday(self) -> int
Return day of the week, where Monday == 0 ... Sunday == 6.
- Returns: Return day of the week, where Monday == 0 ... Sunday == 6.
Properties
year
: The year of the date.month
: The month of the date.day
: The day of the date.timestamp
The POSIX timestamp of the beginning of the date.
alltime
alltime
is used to represent a time by specifying hour, minute, second and millisecond.
Methods and Constructor
__init__(self, hour, minute, second, microsecond=0)
Constructor of class alltime
.
hour
: The hour of the time raning from 0 to 23. A ValueError will be raised if month is out of range.minute
: The minute of the time ranging from 0 to 59. A ValueError will be raised if month is out of range.second
: The second of the time ranging from 0 to 59. A ValueError will be raised if month is out of range.microsecond
: The microsecond of the time raning from 0 to 999999. A ValueError will be raised if month is out of range.
Properties
hour
: The hour of the time.minute
: The minute of the time.second
: The second of the time.microsecond
: The microsecond of the time.
alldatetime
alldatetime
is used to represent a date time.
Methods and Constructor
__init__(self, year: int, month: int, day: int, hour: int=0, minute: int=0, second: int=0, microsecond: int=0)
Constructor of class alldatetime
.
year
: The year of the date. No limitation. Use negative numbers to represent years before the Common Era (BC).month
: The month of the date. Ranging from 1 to 12. A ValueError will be raised if month is out of range.day
: The day of the date. The range starts from 1 and goes up to the number of days in the specified month. A ValueError will be raised if month is out of range.hour
: The hour of the time raning from 0 to 23. A ValueError will be raised if month is out of range.minute
: The minute of the time ranging from 0 to 59. A ValueError will be raised if month is out of range.second
: The second of the time ranging from 0 to 59. A ValueError will be raised if month is out of range.microsecond
: The microsecond of the time raning from 0 to 999999. A ValueError will be raised if month is out of range.
classmethod fromtimestamp(cls, timestamp: int)
Return an instance of alldatetime
corresponding to the POSIX timestamp.
timestamp
: POSIX timestamp.- Returns: An instance of
alldatetime
corresponding to the POSIX timestamp.
Example usage:
from alldatetime.alldatetime import alldatetime
dt = alldatetime.fromtimestamp(-111553854830)
print(dt) # -1567-12-31 10:06:10
dt = alldatetime.fromtimestamp(0)
print(dt) # 1970-01-01 00:00:00
date(self) -> alldate
Return an alldate
instance representing the date part of the date time.
- Returns: An
alldate
instance representing the date part of the date time.
time(self) -> alltime
Return an alltime
instance representing the time part of the date time.
- Returns: An
alltime
instance representing the time part of the date time.
classmethod strptime(cls, date_string: str, format: str)
Class method strptime
creates an alldatetime object from a string representing a date and time and a corresponding format string.
date_string
: A string representing a date and time.format
: Corresponding format string.- Returns: An instance of
alldatetime
parsed from the date and time string based on the format string.
Example usage:
from alldatetime.alldatetime import alldatetime
alldatetime.strptime("5000-01-08 08:30:15 BC", "%Y-%m-%d %H:%M:%S") # alldatetime(-5000, 1, 8, 8, 30, 15)
alldatetime.strptime("5000/01/08 08:30:15 BC", "%Y/%m/%d %H:%M:%S") # alldatetime(-5000, 1, 8, 8, 30, 15)
alldatetime.strptime("2000-01-08 08:30:15 AD", "%Y-%m-%d %H:%M:%S") # alldatetime(2000, 1, 8, 8, 30, 15)
alldatetime.strptime("2000-01-08 08:30:15", "%Y-%m-%d %H:%M:%S") # alldatetime(2000, 1, 8, 8, 30, 15)
weekday(self) -> int
Return day of the week, where Monday == 0 ... Sunday == 6.
- Returns: Return day of the week, where Monday == 0 ... Sunday == 6.
Properties
year
: The year of the date.month
: The month of the date.day
: The day of the date.hour
: The hour of the time.minute
: The minute of the time.second
: The second of the time.microsecond
: The microsecond of the time.timestamp
The POSIX timestamp of the date time.
alldateperiod
alldateperiod
is used to represent a date period, consisting of a start date and an end date, forming an open-closed interval.
Methods and Constructor
__init__(self, start_date: alldate, end_date: alldate)
Constructor of class alldateperiod
.
start_date
: The start date of the date period.end_date
: The end date of the date period.
overlap_with(self, other)
Check whether the date period overlaps with another date period.
other
: An instance ofalldateperiod
.- Returns: Whether the date period overlaps with the date period passed.
Example usage:
from alldatetime.alldatetime import alldate, alldateperiod
period = alldateperiod(alldate(2023, 12, 1), alldate(2023, 12, 5))
other_period = alldateperiod(alldate(2023, 10, 10), alldate(2023, 12, 3))
overlap = period.overlap_with(other_period) # True
cover(self, date: alldate) -> bool
Check whether the date period covers a date.
date
: An instance ofalldate
.- Returns: Whether the date period covers the date passed.
Example usage:
from alldatetime.alldatetime import alldate, alldateperiod
period = alldateperiod(alldate(2023, 12, 1), alldate(2023, 12, 5))
date = alldate(2023, 12, 4)
period.cover(date) # True
date = alldate(2023, 12, 5)
period.cover(date) # False
Properties
start_date
: The start date of the date period.end_date
: The end date of the date period.
Precision
Precision
is used to indicate how precise a fuzzydate
is. It consists of two parts: num and unit.
Methods and Constructor
__init__(self, num: int, unit: PrecisionUnit)
num
: Required. A number representing precision.unit
: Required. Enum PrecisionUnit: Year, Month, Day.
Properties
num
: A number representing precision.unit
: Enum PrecisionUnit: Year, Month, Day
fuzzydate
fuzzydate
represents an imprecise time, unlike alldate
which represents a specific date. alldate
requires specifying the exact year, month, and day, whereas fuzzydate
only needs the year specified; the month and day can be left unspecified.
Methods and Constructor
__init__(self, year: int = None, month: int = None, day: int = None, precision: Precision = None, forward_precision: Precision = None, backward_precision: Precision = None)
Constructor of class fuzzydate
.
year
: Required. The year of the fuzzy date. Use negative numbers to represent years before the Common Era (BC).month
: Optional. The month of the fuzzy date.day
: Optional. The day of the fuzzy date.precision
: Optional. The precision of the fuzzy date for both forward and backward.forward_precision
: Optional. The forward precision of the fuzzy date. If not present, precision will be used.backward_precision
: Optional. The forward precision of the fuzzy date. If not present, precision will be used.
Note that, if no precision was passed, fuzzydate
will infer the precision from the arguments of year, month and day.
to_alldateperiod(self) -> alldateperiod
Convert the fuzzydate
to alldateperiod
.
- Returns: An instance of
alldateperiod
representing the range of thefuzzydate
.
Example usage:
from alldatetime.fuzzydatetime import fuzzydate
fdate = fuzzydate(1987)
fdate.to_alldateperiod() # 1987-01-01 -> 1988-01-01
fdate = fuzzydate(1987, 1)
fdate.to_alldateperiod() # 1987-01-01 -> 1987-01-31
fdate = fuzzydate(1987, 1, 1)
fdate.to_alldateperiod() # 1987-01-01 -> 1987-01-02
to_alldateperiod_timestamps(self) -> tuple[float, float]
Convert the fuzzydate
to a tuple of two timestamps.
- Returns: A tuple of two floats, the first float is the timestamp of start date, and the second float is the timestamp of end date.
Example usage:
from alldatetime.fuzzydatetime import fuzzydate
fdate = fuzzydate(1987)
fdate.to_alldateperiod_timestamps() # 536457600.0 -> 567993600.0
fdate = fuzzydate(1987, 1)
fdate.to_alldateperiod_timestamps() # 536457600.0 -> 539049600.0
fdate = fuzzydate(1987, 1, 1)
fdate.to_alldateperiod_timestamps() # 536457600.0 -> 536544000.0
overlap_with(self, other) -> bool
Check whether the fuzzydate
overlaps with another fuzzydate
.
other
: An instance offuzzydate
.- Returns: Whether the
fuzzydate
overlaps with thefuzzydate
passed.
Example usage:
from alldatetime.fuzzydatetime import fuzzydate
fdate1, fdate2 = fuzzydate(1987), fuzzydate(1988)
fdate1.overlap_with(fdate2) # False
fdate1, fdate2 = fuzzydate(1987), fuzzydate(1987, 1)
fdate1.overlap_with(fdate2) # True
fdate1, fdate2 = fuzzydate(1987), fuzzydate(1987, 12, 31)
fdate1.overlap_with(fdate2) # True
Properties
year
: The year of the fuzzy date.month
: The month of the fuzzy date.day
: The day of the fuzzy date.anchor
: The anchor date of the fuzzy date. It is an instance ofalldate
initiated with the year, month and day. If month or day is absent, 1 is used.forward_precision
: The forward precision.backward_precision
: The backward precision.
fuzzydateperiod
fuzzydateperiod
is used to represent a date period, consisting of a fuzzy start date and an fuzzy end date, forming an open-closed interval.
Methods and Constructor
__init__(self, start_date: fuzzydate, end_date: fuzzydate)
Constructor of class fuzzydateperiod
.
start_date
: The fuzzy start date of the date period.end_date
: The fuzzy end date of the date period.
cover(self, date: fuzzydate) -> bool
Check whether the date period covers a fuzzy date.
date
: An instance offuzzydate
.- Returns: Whether the date period covers the fuzzy date passed.
Example usage:
from alldatetime.fuzzydatetime import fuzzydate, fuzzydateperiod
period = fuzzydateperiod(fuzzydate(202, 1), fuzzydate(202, 5))
period.cover(fuzzydate(202, 3)) # True
period.cover(fuzzydate(202, 1)) # True
period.cover(fuzzydate(202, 6)) # False
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
Built Distribution
File details
Details for the file alldatetime-0.1.6.tar.gz
.
File metadata
- Download URL: alldatetime-0.1.6.tar.gz
- Upload date:
- Size: 13.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4d6c786b6aafd18da9f71fa674ba896418373db3a06adf6c611bbabc096f8a05 |
|
MD5 | 5d56f9d1c7dce99f3088728c0c4ab5ed |
|
BLAKE2b-256 | 0171d1f861f6c62d46601fdbb9585eabeee097add0a0644431d6cbb94aeb454b |
File details
Details for the file alldatetime-0.1.6-py3-none-any.whl
.
File metadata
- Download URL: alldatetime-0.1.6-py3-none-any.whl
- Upload date:
- Size: 11.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f7c2f87734d87df91ce11c77ee4bdc039ef0bdd02f3fd695d27ab49bfa70b71c |
|
MD5 | 18d172034b983b5520d5901a84f73b35 |
|
BLAKE2b-256 | 20ff56730f573a6123c9bdcb7cf620c5d8ec34de1299ba4b24dfc8488bb1d33a |