Source code for hebrewcal.formatting.dates
"""Render dates in numeric and named output formats."""
from __future__ import annotations
from typing import Literal
from hebrewcal.calendars.gregorian import GregorianDate
from hebrewcal.calendars.hebrew import HebrewDate
from hebrewcal.names import hebrew_month_name
from hebrewcal.numerals import to_hebrew_numeral
GregorianStyle = Literal["iso", "din"]
HebrewStyle = Literal["named", "numeric", "hebrew"]
[docs]
def format_gregorian(date: GregorianDate, style: GregorianStyle = "iso") -> str:
"""Format a Gregorian date as ISO 8601 or DIN 5008."""
if style == "iso":
return f"{date.year:04d}-{date.month:02d}-{date.day:02d}"
if style == "din":
return f"{date.day:02d}.{date.month:02d}.{date.year:04d}"
raise ValueError(f"unknown style: {style!r}")
[docs]
def format_hebrew(date: HebrewDate, style: HebrewStyle = "named") -> str:
"""Format a Hebrew date.
Styles: ``"numeric"`` (e.g. ``5785-07-01``), ``"named"`` (transliterated month
name, e.g. ``1 Tishri 5785``), or ``"hebrew"`` (native Hebrew script with the
day and year as gematria numerals, e.g. ``א׳ תשרי ה׳תשפ״ה``).
"""
if style == "numeric":
return f"{date.year}-{date.month:02d}-{date.day:02d}"
if style == "named":
name = hebrew_month_name(date.year, date.month, system="transliteration")
return f"{date.day} {name} {date.year}"
if style == "hebrew":
name = hebrew_month_name(date.year, date.month, system="hebrew")
return f"{to_hebrew_numeral(date.day)} {name} {to_hebrew_numeral(date.year)}"
raise ValueError(f"unknown style: {style!r}")