Date & Time

Multilingual date and time parsing, formatting, and representation.

multilingual provides multilingual date and time classes that parse and format dates using the conventions of 17 supported languages.


MPDate

Multilingual date class with localized parsing and formatting.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from multilingualprogramming import MPDate

# Parse from string with language hint
d1 = MPDate.parse("15 janvier 2024", language="fr")
print(d1.year, d1.month, d1.day)   # 2024 1 15

d2 = MPDate.parse("15 de enero de 2024", language="es")
d3 = MPDate.parse("15 يناير 2024", language="ar")
d4 = MPDate.parse("2024年1月15日", language="ja")
d5 = MPDate.parse("15 जनवरी 2024", language="hi")

# ISO format always works
d6 = MPDate.parse("2024-01-15")     # ISO 8601

# Create from parts
d7 = MPDate(year=2024, month=1, day=15)

# Format for a language
print(d1.format(language="fr"))     # 15 janvier 2024
print(d1.format(language="de"))     # 15. Januar 2024
print(d1.format(language="ar"))     # 15 يناير 2024
print(d1.format(language="ja"))     # 2024年1月15日
print(d1.format(language="zh"))     # 2024年1月15日
print(d1.format(language="hi"))     # 15 जनवरी 2024

# Properties
print(d1.year)                      # 2024
print(d1.month)                     # 1
print(d1.day)                       # 15
print(d1.weekday())                 # 0 (Monday)
print(d1.isoformat())               # "2024-01-15"

MPTime

Multilingual time class.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from multilingualprogramming import MPTime

# Create
t1 = MPTime(14, 30, 0)              # 14:30:00
t2 = MPTime(14, 30, 45, 123456)     # 14:30:45.123456

# Format
print(t1.format(language="fr"))     # 14:30:00
print(t1.format(language="ar"))     # ١٤:٣٠:٠٠  (Arabic-Indic digits)
print(t1.format(language="ja"))     # 14時30分00秒

# Properties
print(t1.hour)                      # 14
print(t1.minute)                    # 30
print(t1.second)                    # 0
print(t1.isoformat())               # "14:30:00"

MPDatetime

Combined datetime class.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from multilingualprogramming import MPDatetime

# Current datetime
dt = MPDatetime.now()

# Create from parts
dt1 = MPDatetime(year=2024, month=1, day=15, hour=14, minute=30, second=0)

# Parse
dt2 = MPDatetime.parse("15 janvier 2024 14:30:00", language="fr")

# Format
print(dt1.format(language="fr"))    # 15 janvier 2024 à 14:30:00
print(dt1.format(language="de"))    # 15. Januar 2024 um 14:30:00
print(dt1.format(language="ja"))    # 2024年1月15日 14時30分00秒
print(dt1.format(language="ar"))    # 15 يناير 2024 الساعة 14:30:00

# Components
print(dt1.date())                   # MPDate(2024, 1, 15)
print(dt1.time())                   # MPTime(14, 30, 0)

Month Names by Language

Month en fr de es ja ar hi zh
1 January janvier Januar enero 1月 يناير जनवरी 一月
2 February février Februar febrero 2月 فبراير फरवरी 二月
3 March mars März marzo 3月 مارس मार्च 三月
4 April avril April abril 4月 أبريل अप्रैल 四月
5 May mai Mai mayo 5月 مايو मई 五月
6 June juin Juni junio 6月 يونيو जून 六月
7 July juillet Juli julio 7月 يوليو जुलाई 七月
8 August août August agosto 8月 أغسطس अगस्त 八月
9 September septembre September septiembre 9月 سبتمبر सितंबर 九月
10 October octobre Oktober octubre 10月 أكتوبر अक्टूबर 十月
11 November novembre November noviembre 11月 نوفمبر नवंबर 十一月
12 December décembre Dezember diciembre 12月 ديسمبر दिसंबर 十二月

Resource Files

Date/time resources are stored in:

1
2
3
4
5
multilingualprogramming/resources/datetime/
├── months.json      # Month names in all languages
├── weekdays.json    # Weekday names in all languages
├── eras.json        # Era names (AD/BC, etc.) in all languages
└── formats.json     # Date/time format templates per language

Date Literals in Programs

multilingual programs support date literals using dedicated delimiters:

1
2
3
# Date literal syntax (using date delimiters from operators.json)
let today = |2024-01-15|        # ISO date literal
let birthday = |15 janvier 2024|  # Localized date literal (French)

Integration with datetime Module

MPDate/MPTime are interoperable with Python’s standard datetime module:

1
2
3
4
5
6
7
8
9
10
11
from multilingualprogramming import MPDate
import datetime

# Convert to Python datetime
mp_date = MPDate.parse("15 janvier 2024", language="fr")
py_date = mp_date.to_python_date()    # datetime.date(2024, 1, 15)

# Convert from Python datetime
py_date = datetime.date(2024, 1, 15)
mp_date = MPDate.from_python_date(py_date)
print(mp_date.format(language="ar"))  # 15 يناير 2024