تبدیل تاریخ میلادی به شمسی در پایتون – آموزش گام به گام + کد

۱۵۴۲ بازدید
آخرین به‌روزرسانی: ۲۷ دی ۱۴۰۲
زمان مطالعه: ۵ دقیقه
تبدیل تاریخ میلادی به شمسی در پایتون – آموزش گام به گام + کد

زبان برنامه‌‌نویسی پایتون، روز به روز طرفداران بیشتری پیدا می‌کند و توسعه‌دهندگان، آن را برای اهداف مختلف و در پروژه‌های گوناگون مورد استفاده قرار می‌دهند. در این میان، گاهی اوقات برنامه‌نویسان - به‌ویژه توسعه دهندگان اپلیکیشن‌های فارسی - به فرایند تبدیل تاریخ‌های میلادی به معادل خورشیدی یا جلالی آن نیاز پیدا می‌کنند. ماژول‌ها و کتابخانه‌های مختلفی برای انجام این کار توسعه داده شده‌اند. در این مطلب از مجله فرادرس می‌خواهیم نحوه تبدیل تاریخ میلادی به شمسی در پایتون را به کمک چندین ماژول موجود و به‌‌همراه مثال و نمونه کد با هم بررسی کنیم و در انتها نیز به برخی سوالات متداول پاسخ می‌دهیم. پس اگر می‌خواهید با این نوع تبدیل تاریخ آشنا شوید، تا انتهای این مطلب را مطالعه کنید.

تبدیل تاریخ میلادی به شمسی در پایتون با کتابخانه Khayyam

خیام یا Khayyam، یک کتابخانه تاریخ و زمان فارسی - یا جلالی - به‌همراه «منطقه‌زمانی» (Timezone)، «ساعت تابستانی» (Daylight-Saving) یا DST، پشتیبانی از فرمت‌بندی کامل و تجزیه برای نسخه‌های ۲ و ۳ از پایتون است.

  • ورود به صفحه کتابخانه Khayyam در pypi «+»

ماژول Khayyam، کلاس‌هایی را برای دستکاری تاریخ‌ها و زمان‌های فارسی به هر ۲ صورت ساده و پیچیده فراهم می‌کند. در عین حال از محاسبات تاریخ و زمان نیز پشتیبانی می‌کند. این پیاده‌سازی روی استخراج مؤثر ویژگی با دستکاری و فرمت‌بندی خروجی متمرکز است. این ماژول در حال حاضر از هر دو نسخه پایتون ۲ و ۳ پشتیبانی می‌کند.

تصویری ساده و حداقلی که یک فرد در حال یادگیری اینتراکتیو با آموزش‌های پایتون است.

با توجه به مستندات رسمی پایتون، اشیا تاریخ و زمان شامل ۲ نوع است که در ادامه آورده‌ایم.

  • Aware: شی Aware، اطلاعات کافی در مورد تنظیمات زمانی سیاستی و الگوریتمی قابل اجرا نظیر اطلاعات «منطقه زمانی» و ساعت تابستانی دارد تا از این طریق موقعیت خود را نسبت به سایر اشیا Aware پیدا کند. یک شی Aware برای نمایش لحظه خاصی در زمان، که قابل تفسیر نیست، مورد استفاده قرار می‌گیرد.
  • Naive: شی Naive، اطلاعات کافی به منظور پیدا کردن موقعیت دقیق و واضح خود، بسته به سایر اشیا تاریخ و زمان را ندارد. اینکه شی Naive، بیان‌گر «ساعت زمان جهانی» (Coordinated Universal Time | UTC)، زمان محلی یا زمانی در سایر Timezone باشد، تنها بر عهده برنامه است. درست مانند اینکه عددی خاص، متر، مایل یا جرم را نشان دهد. درک و کار با اشیا Naive آسان است و این مورد، به قیمت نادیده گرفتن برخی جنبه‌های واقعیت تمام می‌شود.

برای اپلیکیشن‌هایی که به اشیای Aware نیاز دارند، اشیای khayyam.JalaliDate  و khayyam.JalaliDatetime  یک خصوصیت اختیاری اطلاعات منطقه زمانی به‌نام tzinfo  دارند که می‌تواند روی یک نمونه از زیرکلاسِ کلاس انتزاعی datetime.tzinfo  نظیر khayyam.Timezone  و khayyam.TehranTimezone  تنظیم شوند. API این بسته پایتونی، درست همانند ماژول datetime  در نظر گرفته می‌شود. بنابراین اگر با datetime آشنا باشیم، می‌توانیم به‌خوبی از این کتابخانه استفاده کنیم.

نصب ماژول Khayyam

برای نصب ماژول تقویم فارسی خیام، دستور زیر را در محیط خطِ فرمان تایپ و اجرا می‌کنیم.

pip install Khayyam

پس از اتمام نصب، وارد محیط برنامه‌نویسی پایتون - IDE یا کد ادیتور دلخواه مثل vsCode - می‌شویم. ابتدا لازم است تا این ماژول را در ابتدای کدهای خود وارد یا به اصطلاح Import کنیم. کدهای مربوطه را در ادامه آورده‌ایم.

1from datetime import date, datetime
2from khayyam import JalaliDate, JalaliDatetime, TehranTimezone

در خط نخست این کد، دو کلاس date و datetimeاز ماژول datetime پایتون و در خط دوم کلاس‌هایJalaliDate ، JalaliDatetime و TehranTimezoneرا ایمپوریت کرده‌ایم.

تبدیل تاریخ شمسی به میلادی

فرض کنید که می‌خواهیم تاریخ ۱۳۹۴/۴/۳۱ را به میلادی تبدیل کنیم. کدهای مربوط را در ادامه آورده‌ایم.

1JalaliDate(1394, 4, 31).todate()

با متد todate() ، تاریخ مورد نظر را به میلادی تبدیل می‌کنیم. پس از اجرای این کدها، نتیجه به‌صورت زیر خواهد بود.

datetime.date(2015, 7, 22)

همچنین می‌توانیم از کدهای زیر استفاده کنیم.

1now = JalaliDatetime(1394, 4, 31, 15, 38, 6, 37269)
2now.todate()

نتیجه اجرای این کدها به‌صورتی خواهد بود که در ادامه آورده‌ایم.

datetime.date(2015, 7, 22)

کدهای زیر را هم در نظر بگیرید.

1now.todatetime()

خروجی این کدها به‌صورت زیر خواهد بود.

datetime.datetime(2015, 7, 22, 15, 38, 6, 37269)

تبدیل تاریخ میلادی به شمسی

کدهای زیر تاریخ میلادی مدنظر را به معادل شمسی آن تبدیل خواهد کرد.

1JalaliDatetime(datetime(2015, 7, 22, 14, 47, 9, 821830)

خروجی این کدها نیز به‌صورت زیر خواهد بود.

khayyam.JalaliDatetime(1394, 4, 31, 14, 47, 9, 821830, Chaharshanbeh)

قطعه کد زیر کلاس JalaliDatetime  را برای تبدیل تاریخ میلادی به شمسی به‌کار می‌گیرد.

1>>> JalaliDatetime(datetime(2015, 7, 22, 14, 47, 9, 821830, TehranTimezone()))

خروجی این کد نیز به‌صورت زیر خواهد بود.

khayyam.JalaliDatetime(1394, 4, 31, 14, 47, 9, 821830, tzinfo=+03:30 dst:60, Chaharshanbeh)

کد آورده شده در زیر، تبدیل تاریخ میلادی به شمسی را با استفاده از کلاس JalaliDate  انجام می‌دهد.

1JalaliDate(date(2015, 7, 22))

خروجی این کدها به صورت زیر خواهد بود.

khayyam.JalaliDate(1394, 4, 31, Chaharshanbeh)

تبدیل تاریخ میلادی به شمسی در پایتون با کتابخانه persiantools

این کتابخانه، تاریخ شمسی یا جلالی را برا اساس ماژول استاندارد تاریخ و زمان پایتون - که در یکی از مطالب پیشین مجله فرادرس توضیح داده شده است - ارائه می‌دهد.

  • ورود به صفحه persiantools در pypi «+»
لپتاپ و فنجان نوشیدنی روی میز

از خصوصیات این کتابخانه می‌توان به موارد فهرست شده در زیر اشاره کرد.

  • تبدیل تاریخ-زمان شمسی به میلادی و برعکس.
  • از عملگرهای حسابی و مقایسه‌ای نظیر +، -، == و =< پشتیبانی می‌کند.
  • از TimeZone پشتیبانی به‌عمل می‌آورد.
  • ارقام و کاراکترهای فارسی و عربی را به یکدیگر تبدیل می‌کند.
  • اعداد را به کلمات تبدیل می‌کند.

لازم به یادآوری است که persiantools از پایتون ۳٫۶ به بالا را پشتیبانی می‌کند. برای نصب کتابخانه ،دستور زیر را در خط فرمات تایپ و اجرا می‌کنیم.

python -m pip install persiantools

سپس، این کتابخانه را همانطور که در کد زیر مشخص شده، در ابتدای کدهای برنامه خود ایمپورت می‌کنیم.

1from persiantools.jdatetime import JalaliDate
2import datetime

ممکن است با خطای آورده شده در زیر، روبه رو شویم.

ModuleNotFoundError: No module named 'pytz'

در این صورت، دستور زیر را برای نصب pytz، تایپ و اجرا می‌کنیم.

pip install pytz

اکنون می‌توانیم برای تبدیل تاریخ میلادی به شمسی، از کد آورده شده در زیر استفاده کنیم.

1JalaliDate(datetime.date(1990, 9, 23))

خروجی این کد به‌صورت زیر است.

JalaliDate(1369, 7, 1, Yekshanbeh)

از روش زیر هم برای تبدیل تاریخ شمسی به میلادی می‌توانیم استفاده کنیم.

1JalaliDate.to_jalali(2013, 9, 16)

و نتیجه‌ای به‌صورت زیر خواهیم داشت.

JalaliDate(1392, 6, 25, Doshanbeh)

تبدیل تاریخ شمسی به میلادی در پایتون با کتابخانه persiantools

برای این منظور می‌توانیم از متد to_gregorian  به‌شکل زیر استفاده کنیم.

1JalaliDate(1392, 6, 25).to_gregorian()

اجرای این کدهایی نتایجی شبیه به زیر را بر می‌گرداند.

datetime.date(2013, 9, 16)

تبدیل تاریخ میلادی به شمسی در پایتون با کتابخانه jdatetime

کتابخانه jdatetime یک پیاده‌سازی جلالی از ماژول datetime  پایتون محسوب می‌شود.

  • ورود به صفحه jdatetime در pypi «+»
تصویری ساده و حداقلی که یک فرد در حال یادگیری اینتراکتیو با آموزش‌های پایتون است.

قبل از هر چیز، ابتدا این کتابخانه را با دستور آورده شده در زیر، نصب می‌کنیم.

pip install jdatetime

ماژول jdatetime به‌طور دقیق از متدهای ماژول datetime  پایتون پیروی می‌کند. این متدها همچنین، به jdatetime.date  و jdatetime.datetime  اضافه شده‌اند.

برای استفاده از این ماژول می‌بایست نخست آن را نصب کنیم. برای نصب به روش pip، دستورات زیر را در خط فرمان تایپ و اجرا می‌کنیم.

pip install jdatetime

پس از نصب موفقیت‌آمیز، کتابخانه jdatetime  را در ابتدای کدهای برنامه خود - همان‌طور که در ادامه آورده شده - import می‌کنیم.

1import jdatetime

برای تبدیل تاریخ مورد نظر از میلادی به شمسی از متد fromgregorian  به‌صورت زیر استفاده می‌کنیم.

1jdatetime.date.fromgregorian(day=27,month=12,year=2023) 

بدین ترتیب، نتیجه‌ای مانند آنچه در ادامه آورده شده را در خروجی خواهیم داشت.

jdatetime.date.fromgregorian(day=27,month=12,year=2023) 

تبدیل تاریخ شمسی به میلادی در پایتون با کتابخانه jdatetime

اکنون می‌توانیم با استفاده از متد togregorian  ، تاریخ شمسی مورد نظر را به‌شکلی که در ادامه آورده شده به میلادی تبدیل کنیم.

1gregorian_date = jdatetime.date(1402,10,6).togregorian()

خروجی این کد پس از اجرا به‌صورت زیر خواهد بود.

jdatetime.date(1402,10,6).togregorian()

تبدیل تاریخ میلادی به شمسی در پایتون با کتابخانه jDate

ماژول jDate را می‌توانیم برای تبدیل تاریخ‌های میلادی به شمسی و بالعکس مورد استفاده قرار دهیم. برای نصب این ماژول، دستور زیر را در خط فرمان تایپ و اجرا می‌کنیم. توجه داشته باشید که این کتابخانه تنها از پایتون ۲٫۷ پشتیبانی می‌کند.

pip install jDate

پس از انجام نصب، می‌بایست در محیط کدنویسی پایتون خود، آن را ایمپورت کنیم.

1import jDate

اکنون می‌توانیم با متدی که در ادامه آورده شده، تاریخ میلادی را به تاریخ شمسی تبدیل کنیم.

1jDate.miladi2shamsi(1,25,2012)

نتیجه این قطعه کد به‌صورت یک تاپل سه‌تایی شامل سال، روز و ماه به‌شکل 5/11/1390  خواهد بود.

تبدیل تاریخ شمسی به میلادی در پایتون با کتابخانه jDate

همچنین برای تبدیل تاریخ شمسی به میلادی می‌توانیم از متد shamsi2miladi  استفاده کنیم.

1jDate.shamsi2miladi(1,29,1391)

خروجی این کدها به‌صورت 2012/17/4  خواهد بود.

فردی در حال کدنویسی در لپتاپ خود - تبدیل تاریخ میلادی به شمسی در پایتون

سوالات متداول

در این قسمت، برخی از پرسش‌‌های متداول در مورد تبدیل تاریخ میلادی به شمسی در پایتون را پاسخ می‌دهیم.

تبدیل تاریخ میلادی به شمسی در پایتون چگونه است؟

برای این منظور می‌توانیم از کتابخانه‌های پایتون نظیر khayyam ،persiantools ،jdatetime و jDate استفاده کنیم.

کتابخانه خیام پایتون چیست؟

Khayyam، یک کتابخانه تاریخ و زمان جلالی به‌همراه TimezoneDaylight-Saving است.

جمع‌بندی

پایتون به علت سهولت در کدنویسی و خوانایی بالای کدها، طرفداران زیادی دارد و ما به‌عنوان یک توسعه‌دهنده پایتون فارسی زبان، به احتمال قوی و به دفعات از قابلیت تاریخ و زمان جلالی یا شمسی در اپلیکیشن‌هایمان استفاده خواهیم کرد.

در این مطلب از مجله فرادرس سعی بر این بوده تا چندین کتابخانه پایتونی را معرفی کنیم که این کار را در کنار ویژگی‌های بسیاری زیاد دیگری که دارند، برایمان انجام می‌دهند. ضمن معرفی این ماژول‌ها، مثال و قطعه کدهای مرتبط با آن‌ها را نیز در این باره مطرح کردیم تا پیاده‌سازی آن برایتان آسان شود.

بر اساس رای ۰ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
dobisel
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *