Timezone
Buraq’s timezone utilities mirror django.utils.timezone and use Python’s stdlib zoneinfo module (a C extension, no extra dependencies). Language state is stored in a contextvars.ContextVar making it async-safe — each request gets its own timezone context.
USE_TZ = True # enable timezone-aware datetimes (default: True)TIME_ZONE = "UTC" # default timezonefrom buraq.utils.timezone import ( now, localtime, localdate, make_aware, make_naive, is_aware, is_naive, get_current_timezone, activate, deactivate, override, UTC,)Return the current datetime. With USE_TZ = True (default) returns an aware UTC datetime.
from buraq.utils.timezone import now
dt = now()# datetime(2026, 8, 4, 12, 0, 0, tzinfo=datetime.timezone.utc)Use now() instead of datetime.now() in your models and views — it respects USE_TZ.
localtime()
Section titled “localtime()”Convert a UTC datetime to the active (or specified) timezone.
from buraq.utils.timezone import now, localtimefrom zoneinfo import ZoneInfo
utc_dt = now()
# Convert to the active timezone (from TIME_ZONE setting)local = localtime(utc_dt)
# Convert to a specific timezoneriyadh = localtime(utc_dt, "Asia/Riyadh")tokyo = localtime(utc_dt, ZoneInfo("Asia/Tokyo"))
# No argument → current time in active timezonelocal_now = localtime()localdate()
Section titled “localdate()”Return the local date (not datetime) for a given UTC datetime.
from buraq.utils.timezone import now, localdate
today = localdate() # today in active timezonedate = localdate(post.created_at, "Asia/Dubai")make_aware() / make_naive()
Section titled “make_aware() / make_naive()”from datetime import datetimefrom buraq.utils.timezone import make_aware, make_naive
# Attach timezone info to a naive datetimenaive = datetime(2026, 8, 4, 12, 0, 0)aware = make_aware(naive) # uses active timezoneaware = make_aware(naive, "America/New_York") # explicit timezone
# Strip timezone info (convert first, then strip)naive_local = make_naive(aware) # in active timezonenaive_ny = make_naive(aware, "America/New_York")is_aware() / is_naive()
Section titled “is_aware() / is_naive()”from datetime import datetime, timezonefrom buraq.utils.timezone import is_aware, is_naive
aware = datetime(2026, 1, 1, tzinfo=timezone.utc)naive = datetime(2026, 1, 1)
is_aware(aware) # Trueis_naive(naive) # Trueoverride() — per-request timezone
Section titled “override() — per-request timezone”Use the override context manager to temporarily activate a different timezone. Pairs well with user timezone preferences:
from buraq.utils.timezone import override, localtime, nowfrom buraq.shortcuts import render
async def dashboard(request): user_tz = request.user.timezone or "UTC" # e.g. "America/Chicago"
with override(user_tz): context = { "now": localtime(), "joined": localtime(request.user.created_at), }
return await render(request, "dashboard.html", context)Works identically in sync and async code because it uses contextvars.
activate() / deactivate()
Section titled “activate() / deactivate()”Lower-level API — use override() instead when possible.
from buraq.utils.timezone import activate, deactivate
token = activate("Asia/Karachi")# ... timezone is now Asia/Karachi ...deactivate(token) # restore previous timezoneUTC constant
Section titled “UTC constant”from buraq.utils.timezone import UTCfrom datetime import datetime
dt = datetime(2026, 8, 4, 12, 0, 0, tzinfo=UTC)Settings Reference
Section titled “Settings Reference”| Setting | Default | Description |
|---|---|---|
USE_TZ |
True |
Store and return timezone-aware datetimes |
TIME_ZONE |
"UTC" |
Default timezone (any IANA tz name, e.g. "America/New_York") |
Valid timezone strings follow the IANA timezone database — for example: "Europe/London", "Asia/Tokyo", "America/New_York".