Skip to main content

undate overview

undate

undate is a python library for working with uncertain or partially known dates.

[!NOTE] This is beta software; it is still in development and not fully feature complete. If you use it, please let us know and share your feedback.

Currently undate supports parsing, formatting, and reasoning with dates in varying precision and calendars; dates with different precision and from different original calendars can be used together. Supported formats include:

  • portions of EDTF (Extended Date Time Format)
  • ISO8601
  • parsing and calendar conversion for dates in Hebrew Anno Mundi and Islamic Hijri calendars
  • Gregorian dates with full or abbreviated month names in any order for multiple languages (English, Spanish, French, German, Kinyarwanda, Ganda, Tigrinya)
  • Christian liturgical dates (fixed holidays and movable feasts)

For unambiguous dates, there is an experimental omnibus parser which combines all available dates (bare years are currently assumed to be Gregorian calendar).

For more about the origin and goals of undate, read our 2025 software paper:

Rebecca Sutton Koeser, Julia Damerow, Robert Casties, and Cole Crawford. "Undate: Humanistic Dates for Computation." Computational Humanities Research, August 5, 2025.


DOI License Documentation Status unit tests codecov Ruff

All Contributors

Installation

Recommended: use pip to install the latest published version from PyPI:

pip install undate

To install a development version or specific tag or branch, you can install from GitHub. Use the @name notation to specify the branch or tag; e.g., to install development version:

pip install git+https://github.com/dh-tech/undate-python@develop#egg=undate

Quick Start

An Undate is analogous to python’s datetime.date but supports varying degrees of precision and unknown information. Initialize with strings or numbers for whichever parts of the date are known:

from undate import Undate, UndateInterval

november7 = Undate(2000, 11, 7)
november = Undate(2000, 11)
year2k = Undate(2000)
partially_known_year = Undate("19XX")

print([str(d) for d in [november7, november, year2k, partially_known_year]])
# [‘2000-11-07’, ‘2000-11’, ‘2000’, ‘19XX’]

print(repr(Undate.parse("Rajab 495", "Islamic")))
# undate.Undate(year=495, month=7, label="Rajab 495 Islamic", calendar="Islamic")

For full examples including duration, comparison, intervals, parsing, and calendar support, see the interactive documentation.

Documentation

Project documentation is available on ReadTheDocs.

For instructions on setting up for local development, see Developer Notes.

See Contributors for more detailed information about contributors.

Publications & Presentations

Related Projects

License

This software is licensed under the Apache 2.0 License.

Download files

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

Source Distribution

undate-0.8.0.tar.gz (55.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

undate-0.8.0-py3-none-any.whl (51.9 kB view details)

Uploaded Python 3

File details

Details for the file undate-0.8.0.tar.gz.

File metadata

  • Download URL: undate-0.8.0.tar.gz
  • Upload date:
  • Size: 55.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for undate-0.8.0.tar.gz
Algorithm Hash digest
SHA256 d30c51f953a2208b6331e7c2024bc5f5fdff073a5fb02845e6112fbb27731708
MD5 585b378fc4a90d5ea09206473bd9d37a
BLAKE2b-256 07ba7ac5501cb190fa45c93388beaa1376e73bd894dc085dcf6e20ed7cace67a

See more details on using hashes here.

Provenance

The following attestation bundles were made for undate-0.8.0.tar.gz:

Publisher: python-publish.yml on dh-tech/undate-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file undate-0.8.0-py3-none-any.whl.

File metadata

  • Download URL: undate-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 51.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for undate-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a19c103b7215ff0d2c501cbbcbce9f6e18846c9b02cb3b810ee8d9ad1128013c
MD5 eb40ea058289f647aeaeaf3eb01445fc
BLAKE2b-256 e2e00761203452bab3b8b58bb659bb0543fae7a3f99356eb05d504ea50d80177

See more details on using hashes here.

Provenance

The following attestation bundles were made for undate-0.8.0-py3-none-any.whl:

Publisher: python-publish.yml on dh-tech/undate-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.8.0 This release

2 files

0.7.0

2 files

0.6.0

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page