Date & Time#

Bangla-aware wrappers for Python’s datetime.date and datetime.datetime. Same constructors, same methods — all text output in Bangla.

from bornomala import BanglaDate, BanglaDatetime, bangla_strftime
from bornomala import FMT_DATE_LONG, FMT_DATE_SHORT, FMT_DATE_WEEKDAY
from bornomala import FMT_DATETIME_LONG, FMT_DATETIME_SHORT
from bornomala import FMT_TIME_12H, FMT_TIME_24H
from bornomala import timezone, timedelta

BanglaDate#

A wrapper for datetime.date that returns Bangla text from strftime and __str__.

Construction#

All three forms are equivalent:

from datetime import date
from bornomala import BanglaDate

BanglaDate(2026, 3, 12)           # year, month, day
BanglaDate(date(2026, 3, 12))     # wrap an existing date
BanglaDate.fromisoformat("2026-03-12")
BanglaDate.fromtimestamp(1741737600)
BanglaDate.today()

strftime(fmt)#

bd = BanglaDate(2026, 3, 12)

bd.strftime("%e %B %Y")           # '১২ মার্চ ২০২৬'
bd.strftime("%A, %e %B %Y")       # 'বৃহস্পতিবার, ১২ মার্চ ২০২৬'
bd.strftime("%d/%m/%Y")           # '১২/০৩/২০২৬'
bd.strftime("%b %Y")              # 'মার্চ ২০২৬'

__str__#

Defaults to FMT_DATE_LONG (%e %B %Y):

str(BanglaDate(2026, 3, 12))     # '১২ মার্চ ২০২৬'
str(BanglaDate(2026, 1, 1))      # '১ জানুয়ারি ২০২৬'

Attributes & methods#

bd = BanglaDate(2026, 3, 12)

bd.year           # 2026
bd.month          # 3
bd.day            # 12
bd.weekday()      # 3  (0=Monday … 6=Sunday)
bd.isoweekday()   # 4  (1=Monday … 7=Sunday)
bd.month_name()   # 'মার্চ'
bd.weekday_name() # 'বৃহস্পতিবার'
bd.isoformat()    # '2026-03-12'

BanglaDatetime#

Extends BanglaDate with time support. Wraps datetime.datetime.

Construction#

from datetime import datetime, date
from bornomala import BanglaDatetime

BanglaDatetime(2026, 3, 12, 10, 30)            # year, month, day, hour, minute
BanglaDatetime(datetime(2026, 3, 12, 10, 30))  # wrap existing datetime
BanglaDatetime(date(2026, 3, 12))              # promote date → midnight
BanglaDatetime(date(2026, 3, 12), hour=9, minute=15)  # promote with time

BanglaDatetime.now()
BanglaDatetime.utcnow()
BanglaDatetime.fromisoformat("2026-03-12T10:30:45")
BanglaDatetime.fromtimestamp(1741737600)

Timezone support#

from bornomala import timezone, timedelta

# UTC
BanglaDatetime.now(tz=timezone.utc)

# Bangladesh Standard Time (UTC+6)
bst = timezone(timedelta(hours=6))
BanglaDatetime(2026, 3, 12, 10, 30, tzinfo=bst)

# Promote a date to a timezone-aware datetime
BanglaDatetime.from_date(date(2026, 3, 12), tzinfo=timezone.utc)

__str__#

Defaults to FMT_DATETIME_LONG (%A, %e %B %Y, %H:%M):

str(BanglaDatetime(2026, 3, 12, 10, 30))
# 'বৃহস্পতিবার, ১২ মার্চ ২০২৬, ১০:৩০'

Time attributes#

bdt = BanglaDatetime(2026, 3, 12, 10, 30, 45, 123456)

bdt.hour         # 10
bdt.minute       # 30
bdt.second       # 45
bdt.microsecond  # 123456
bdt.tzinfo       # None (or tzinfo object if set)

bdt.date()       # BanglaDate(2026, 3, 12)
bdt.time_str()   # '১০:৩০:৪৫'  (FMT_TIME_24H by default)
bdt.time_str(FMT_TIME_12H)  # '১০:৩০ পূর্বাহ্ন'

bangla_strftime(dt, fmt)#

Format any datetime.date or datetime.datetime object with Bangla output, without wrapping it in BanglaDate.

from datetime import date
from bornomala import bangla_strftime

bangla_strftime(date(2026, 3, 12), "%e %B %Y")  # '১২ মার্চ ২০২৬'

Format codes#

CodeOutputExample
%Y4-digit year২০২৬
%y2-digit year২৬
%mMonth, zero-padded০৩
%dDay, zero-padded০১
%eDay, no leading zero
%BFull month nameমার্চ
%bAbbreviated month nameমার্চ
%AFull weekday nameবৃহস্পতিবার
%aAbbreviated weekday nameবৃহ
%HHour, 24h zero-padded১০
%IHour, 12h zero-padded১০
%MMinute, zero-padded৩০
%SSecond, zero-padded৪৫
%pAM/PMপূর্বাহ্ন / অপরাহ্ন
%%Literal %%

Unknown codes (e.g. %Z) pass through unchanged.


Predefined format presets#

ConstantPatternExample output
FMT_DATE_LONG%e %B %Y১২ মার্চ ২০২৬
FMT_DATE_SHORT%d/%m/%Y১২/০৩/২০২৬
FMT_DATE_WEEKDAY%A, %e %B %Yবৃহস্পতিবার, ১২ মার্চ ২০২৬
FMT_DATETIME_LONG%A, %e %B %Y, %H:%Mবৃহস্পতিবার, ১২ মার্চ ২০২৬, ১০:৩০
FMT_DATETIME_SHORT%d/%m/%Y %H:%M১২/০৩/২০২৬ ১০:৩০
FMT_TIME_12H%I:%M %p১০:৩০ পূর্বাহ্ন
FMT_TIME_24H%H:%M:%S১০:৩০:৪৫
from bornomala import BanglaDatetime, FMT_TIME_12H, FMT_DATETIME_SHORT

bdt = BanglaDatetime(2026, 3, 12, 10, 30, 45)

bdt.strftime(FMT_TIME_12H)       # '১০:৩০ পূর্বাহ্ন'
bdt.strftime(FMT_DATETIME_SHORT) # '১২/০৩/২০২৬ ১০:৩০'

Month names#

#FullShort
1জানুয়ারিজানু
2ফেব্রুয়ারিফেব্র
3মার্চমার্চ
4এপ্রিলএপ্রি
5মেমে
6জুনজুন
7জুলাইজুলা
8আগস্টআগ
9সেপ্টেম্বরসেপ্টে
10অক্টোবরঅক্টো
11নভেম্বরনভে
12ডিসেম্বরডিসে

Weekday names#

weekday()FullShort
0সোমবারসোম
1মঙ্গলবারমঙ্গল
2বুধবারবুধ
3বৃহস্পতিবারবৃহ
4শুক্রবারশুক্র
5শনিবারশনি
6রবিবাররবি