روش تنظیم منطقه زمانی در جنگو
در جنگو پیکربندی منطقه زمانی ابتدا در فایل settings.py انجام میشود و پس از آن، میتوانید با استفاده از کتابخانههای موجود، تغییرات لازم را بر اساس نیازهای پروژه در همان منطقه زمانی اعمال کنید. روش اصلی تنظیم منطقه زمانی برای پروژه جنگو، تغییر مقدار تنظیمات TIME_ZONE در فایل settings.py است. این تنظیم، منطقه زمانی پیشفرض برنامه شما را تعریف میکند.
TIME_ZONE = 'Asia/Tehran'
همانطور که مشخص می باشد در این مثال، منطقه زمانی Asia/Tehran تنظیم شده است. توجه داشته باشید که جنگو از پایگاه داده IANA برای نامهای منطقه زمانی استفاده میکند. برای فعالسازی پشتیبانی از منطقه زمانی در جنگو، باید USE_TZ را به مقدار True تغییر دهید. این تنظیم، تضمین میکند که جنگو تمام اطلاعات datetime را در پایگاه داده بهصورت UTC ذخیره کرده و برای نمایش به منطقه زمانی local تبدیل میکند.
USE_TZ = True
هنگامی که USE_TZ برابر True باشد، جنگو مناطق زمانی را مدیریت کرده و اشیای datetime را بین UTC و منطقه زمانی مشخص شده در TIME_ZONE تبدیل میکند. برای کار با Timezone-Aware Datetime، میتوانید از ماژول timezone در جنگو استفاده نمایید که توابع کمکی برای کار با مناطق زمانی را فراهم میکند. یکی از کاربردهای timezone برای محلیسازی فیلدهای DateTime در مدلها است.
به عنوان مثال هنگام کار با فیلدهای datetime در مدلهای جنگو، ممکن است بخواهید زمان را در منطقه زمانی محلی کاربر نمایش دهید. برای این کار لازم است اطمینان حاصل نمایید که تنظیم USE_TZ فعال باشد. سپس میتوانید از تابع localtime در جنگو برای تبدیل فیلدهای datetime به منطقه زمانی محلی استفاده نمایید.

تصویر(1)
در مثال تصویر 1، متد () get_local_example_time فیلد example_time را به منطقه زمانی local تبدیل میکند.
اما اگر میخواهید بهصورت حرفهایتر از تاریخ و زمان در پروژه استفاده کرده و با پایتون ورژن های قدیمیتر از 3.9 کار می کنید؛ بهترین پیشنهاد استفاده از کتابخانه pytz است. کتابخانه pytz در پایتون برای مدیریت مناطق زمانی (time zones) و تعامل با منطقه زمانی در کلاسهای مرتبط با تاریخ و زمان مانند datetime استفاده میشود و پایگاه داده Olson tz را به پایتون وارد میکند.
این کتابخانه امکان انجام محاسبات دقیق و چند سکویی منطقههای زمانی را با استفاده از پایتون نسخه 2.4 یا بالاتر فراهم میسازد.
pytz را می توان با دستور زیر نصب کرد؛
pip install pytz
اما در پروژههایی که از Python 3.9 یا نسخههای بالاتر استفاده میکنند، نیازی به استفاده از کتابخانه pytz نیست، زیرا پشتیبانی از منطقههای زمانی به طور بومی در کتابخانه استاندارد پایتون ارائه شده است. این پشتیبانی با استفاده از کلاس zoneinfo که در ماژول zoneinfo ارائه میشود، انجام میگیرد. از مزیتهای کتابخانه استاندارد پایتون این است که پکیجهای third party مانند tzdata نیز با آن سازگار هستند. در واقع pytz هیچ مزیتی جز سازگاری با نسخههای قدیمیتر پایتون ندارد.
بنابراین، با توجه به الزام استفاده از zoneinfo در نسخههای جدید پایتون و همچنین سادگی آن نسبت به pytz، توصیه میشود در پروژهها از zoneinfo استفاده نمایید.
برای شروع، با دستور زیر میتوانید zoneinfo را وارد پروژه کنید.
from zoneinfo import ZoneInfo
جهت تنظیم منطقه زمانی روی یک شی datetime، کافی است از ZoneInfo بهصورت زیر استفاده کنید.
from datetime import datetime
from zoneinfo import ZoneInfo
dt = datetime(2025, 1, 4, 12, 0, tzinfo=ZoneInfo("Asia/Tehran"))
همچنین برای تغییر منطقه زمانی، میتوانید replace را با شیء ZoneInfo به صورت زیر استفاده نمایید.
dt_utc = dt.replace(tzinfo=ZoneInfo("UTC"))