تبدیل تاریخ میلادی به شمسی در پایتون – آموزش گام به گام + کد
زبان برنامهنویسی پایتون، روز به روز طرفداران بیشتری پیدا میکند و توسعهدهندگان، آن را برای اهداف مختلف و در پروژههای گوناگون مورد استفاده قرار میدهند. در این میان، گاهی اوقات برنامهنویسان - بهویژه توسعه دهندگان اپلیکیشنهای فارسی - به فرایند تبدیل تاریخهای میلادی به معادل خورشیدی یا جلالی آن نیاز پیدا میکنند. ماژولها و کتابخانههای مختلفی برای انجام این کار توسعه داده شدهاند. در این مطلب از مجله فرادرس میخواهیم نحوه تبدیل تاریخ میلادی به شمسی در پایتون را به کمک چندین ماژول موجود و بههمراه مثال و نمونه کد با هم بررسی کنیم و در انتها نیز به برخی سوالات متداول پاسخ میدهیم. پس اگر میخواهید با این نوع تبدیل تاریخ آشنا شوید، تا انتهای این مطلب را مطالعه کنید.
تبدیل تاریخ میلادی به شمسی در پایتون با کتابخانه 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 کنیم. کدهای مربوطه را در ادامه آوردهایم.
در خط نخست این کد، دو کلاس date
و datetime
از ماژول datetime پایتون و در خط دوم کلاسهایJalaliDate
، JalaliDatetime
و TehranTimezone
را ایمپوریت کردهایم.
تبدیل تاریخ شمسی به میلادی
فرض کنید که میخواهیم تاریخ ۱۳۹۴/۴/۳۱ را به میلادی تبدیل کنیم. کدهای مربوط را در ادامه آوردهایم.
با متد todate()، تاریخ مورد نظر را به میلادی تبدیل میکنیم. پس از اجرای این کدها، نتیجه بهصورت زیر خواهد بود.
datetime.date(2015, 7, 22)
همچنین میتوانیم از کدهای زیر استفاده کنیم.
نتیجه اجرای این کدها بهصورتی خواهد بود که در ادامه آوردهایم.
datetime.date(2015, 7, 22)
کدهای زیر را هم در نظر بگیرید.
خروجی این کدها بهصورت زیر خواهد بود.
datetime.datetime(2015, 7, 22, 15, 38, 6, 37269)
تبدیل تاریخ میلادی به شمسی
کدهای زیر تاریخ میلادی مدنظر را به معادل شمسی آن تبدیل خواهد کرد.
خروجی این کدها نیز بهصورت زیر خواهد بود.
khayyam.JalaliDatetime(1394, 4, 31, 14, 47, 9, 821830, Chaharshanbeh)
قطعه کد زیر کلاس JalaliDatetime را برای تبدیل تاریخ میلادی به شمسی بهکار میگیرد.
خروجی این کد نیز بهصورت زیر خواهد بود.
khayyam.JalaliDatetime(1394, 4, 31, 14, 47, 9, 821830, tzinfo=+03:30 dst:60, Chaharshanbeh)
کد آورده شده در زیر، تبدیل تاریخ میلادی به شمسی را با استفاده از کلاس JalaliDate انجام میدهد.
خروجی این کدها به صورت زیر خواهد بود.
khayyam.JalaliDate(1394, 4, 31, Chaharshanbeh)
تبدیل تاریخ میلادی به شمسی در پایتون با کتابخانه persiantools
این کتابخانه، تاریخ شمسی یا جلالی را برا اساس ماژول استاندارد تاریخ و زمان پایتون - که در یکی از مطالب پیشین مجله فرادرس توضیح داده شده است - ارائه میدهد.
- ورود به صفحه persiantools در pypi «+»
از خصوصیات این کتابخانه میتوان به موارد فهرست شده در زیر اشاره کرد.
- تبدیل تاریخ-زمان شمسی به میلادی و برعکس.
- از عملگرهای حسابی و مقایسهای نظیر +، -، == و =< پشتیبانی میکند.
- از TimeZone پشتیبانی بهعمل میآورد.
- ارقام و کاراکترهای فارسی و عربی را به یکدیگر تبدیل میکند.
- اعداد را به کلمات تبدیل میکند.
لازم به یادآوری است که persiantools از پایتون ۳٫۶ به بالا را پشتیبانی میکند. برای نصب کتابخانه ،دستور زیر را در خط فرمات تایپ و اجرا میکنیم.
python -m pip install persiantools
سپس، این کتابخانه را همانطور که در کد زیر مشخص شده، در ابتدای کدهای برنامه خود ایمپورت میکنیم.
ممکن است با خطای آورده شده در زیر، روبه رو شویم.
ModuleNotFoundError: No module named 'pytz'
در این صورت، دستور زیر را برای نصب pytz، تایپ و اجرا میکنیم.
pip install pytz
اکنون میتوانیم برای تبدیل تاریخ میلادی به شمسی، از کد آورده شده در زیر استفاده کنیم.
خروجی این کد بهصورت زیر است.
JalaliDate(1369, 7, 1, Yekshanbeh)
از روش زیر هم برای تبدیل تاریخ شمسی به میلادی میتوانیم استفاده کنیم.
و نتیجهای بهصورت زیر خواهیم داشت.
JalaliDate(1392, 6, 25, Doshanbeh)
تبدیل تاریخ شمسی به میلادی در پایتون با کتابخانه persiantools
برای این منظور میتوانیم از متد 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 میکنیم.
برای تبدیل تاریخ مورد نظر از میلادی به شمسی از متد fromgregorian بهصورت زیر استفاده میکنیم.
بدین ترتیب، نتیجهای مانند آنچه در ادامه آورده شده را در خروجی خواهیم داشت.
jdatetime.date.fromgregorian(day=27,month=12,year=2023)
تبدیل تاریخ شمسی به میلادی در پایتون با کتابخانه jdatetime
اکنون میتوانیم با استفاده از متد togregorian ، تاریخ شمسی مورد نظر را بهشکلی که در ادامه آورده شده به میلادی تبدیل کنیم.
خروجی این کد پس از اجرا بهصورت زیر خواهد بود.
jdatetime.date(1402,10,6).togregorian()
تبدیل تاریخ میلادی به شمسی در پایتون با کتابخانه jDate
ماژول jDate را میتوانیم برای تبدیل تاریخهای میلادی به شمسی و بالعکس مورد استفاده قرار دهیم. برای نصب این ماژول، دستور زیر را در خط فرمان تایپ و اجرا میکنیم. توجه داشته باشید که این کتابخانه تنها از پایتون ۲٫۷ پشتیبانی میکند.
pip install jDate
پس از انجام نصب، میبایست در محیط کدنویسی پایتون خود، آن را ایمپورت کنیم.
اکنون میتوانیم با متدی که در ادامه آورده شده، تاریخ میلادی را به تاریخ شمسی تبدیل کنیم.
نتیجه این قطعه کد بهصورت یک تاپل سهتایی شامل سال، روز و ماه بهشکل 5/11/1390 خواهد بود.
تبدیل تاریخ شمسی به میلادی در پایتون با کتابخانه jDate
همچنین برای تبدیل تاریخ شمسی به میلادی میتوانیم از متد shamsi2miladi استفاده کنیم.
خروجی این کدها بهصورت 2012/17/4 خواهد بود.
سوالات متداول
در این قسمت، برخی از پرسشهای متداول در مورد تبدیل تاریخ میلادی به شمسی در پایتون را پاسخ میدهیم.
تبدیل تاریخ میلادی به شمسی در پایتون چگونه است؟
برای این منظور میتوانیم از کتابخانههای پایتون نظیر khayyam ،persiantools ،jdatetime و jDate استفاده کنیم.
کتابخانه خیام پایتون چیست؟
Khayyam، یک کتابخانه تاریخ و زمان جلالی بههمراه TimezoneDaylight-Saving است.
جمعبندی
پایتون به علت سهولت در کدنویسی و خوانایی بالای کدها، طرفداران زیادی دارد و ما بهعنوان یک توسعهدهنده پایتون فارسی زبان، به احتمال قوی و به دفعات از قابلیت تاریخ و زمان جلالی یا شمسی در اپلیکیشنهایمان استفاده خواهیم کرد.
در این مطلب از مجله فرادرس سعی بر این بوده تا چندین کتابخانه پایتونی را معرفی کنیم که این کار را در کنار ویژگیهای بسیاری زیاد دیگری که دارند، برایمان انجام میدهند. ضمن معرفی این ماژولها، مثال و قطعه کدهای مرتبط با آنها را نیز در این باره مطرح کردیم تا پیادهسازی آن برایتان آسان شود.