تبدیل تاریخ میلادی به شمسی در میکروکنترلر AVR
در این پست می خواهیم روش تبدیل تاریخ میلادی به شمسی را توضیح دهیم. همانطور که میدانید تقویم رسمی در اکثر کشورهای جهان به صورت میلادی است و اگر شما بخواهید دستگاه بسازید یا برنامه ای بنویسید باید در آن تاریخ میلادی را به شمسی تبدیل کنید. همانطور که میدانید اکثرIC های ساعت و یا به اصطلاح RTC تاریخ را به صورت میلادی در اختیار ما قرار می دهند. و اگر بخواهیم از این تاریخ استفاده کنیم ناچاریم آن را به تاریخ شمسی یا تقویم جلالی خود تبدیل کنیم. در ابتدا مختصری در مورد تقویم میلادی و شمسی صحبت می کنیم.
تقویم میلادی
تقویم میلادی و گاهشمار میلادی تقویم است با ریشه مسیحی که ابتدایی تاریخ آن میلاد حضرت مسیح میباشد. این تقویم در ۹۵ درصد کشورهای جهان استفاده میشود. چون این تقویم به وسیله پاپ گریگوری سیزدهم تصویب شده به آن تقویم گریگوری نیز میگویند. کشورهای ایران افغانستان اتیوپی تنها کشورهایی هستند که در آن تقویممیلادی تقویم رسمی کشور نیست.
برای تبدیل تاریخ میلادی به تاریخ شمسی بایستی در ابتدا با ماههای تقویم میلادی آشنا شویم. در جدول زیر ماههای تقویم میلادی به همراه نام آن ها در زبان فرانسوی انگلیسی و روسی آورده شده است.
شماره | نام فرانسوی | املای فرانسوی | نام انگلیسی | املای انگلیسی | نام روسی | املای روسی | شمار روز |
۱ | ژانویه | Janvier | جَنیوئری | January | یَنوَر | январ | ۳۱ |
۲ | فوریه | Février | فِبریوئری | February | فیروْرَل | феврал | ۲۸ یا ۲۹ |
۳ | مارس | Mars | مارچ | March | مَرت | март | ۳۱ |
۴ | آوریل | Avril | اِیپریل (آپریل) | April | اَپریل | апрел | ۳۰ |
۵ | مه | Mai | مِی | May | مَی | май | ۳۱ |
۶ | ژوئن | Juin | جون (جوئن) | June | اییُن | июн | ۳۰ |
۷ | ژوئیه | Juillet | جولای | July | اییُل | июл | ۳۱ |
۸ | اوت | Août | آگِست یا آگوست | August | اَوْگُست | август | ۳۱ |
۹ | سپتامبر | Septembre | سِپتِمبِر | September | سینتْیَبر | сентябр | ۳۰ |
۱۰ | اکتبر | Octobre | آکتُبِر یا اُکتُبِر | October | اوکتیَبر | октябр | ۳۱ |
۱۱ | نوامبر | Novembre | نُوِمبِر | November | نویَبر | ноябр | ۳۰ |
۱۲ | دسامبر | Décembre | دِسِمبِر | December | دیکَبر | декабр | ۳۱ |
تقویم هجری شمسی
این تقویم برپایی تقویم جلالی با مبدا هجری است. این مبدا در واقع سال ۶۲۲ میلادی می باشد. تاریخ هجرت پیامبر روز دوشنبه اول ربیع الاول مطابق با بیست و چهارم شهریور می باشد. این تاریخ برابر با ۱۶ سپتامبر سال ۶۲۲ در تقویم گریگوری است. سرآغاز تقویم شمسی روز جمعه که یک فروردین سال ۱ هجری مطابق با ۲۹ شعبان یک سال پیش از هجرت و برابر با ۲۲ مارس سال ۶۲۲ میلادی می باشد. این تاریخ ۵ ماه و ۲۴ روز قبل از هجرت پیامبر است. نام روزها تعداد آن ها و دیگر اطلاعات مربوط به تقویم جلالی در جدول زیر آمده است.
ترتیب | روزها | نام | نام دیگر | تاریخ میلادی |
۱ | ۳۱ | فروردین | حَمَل | ۲۱ مارس – ۲۰ آوریل |
۲ | ۳۱ | اردیبهشت | ثَور | ۲۱ آوریل – ۲۱ مه |
۳ | ۳۱ | خرداد | جَوزا | ۲۲ مه – ۲۱ ژوئن |
۴ | ۳۱ | تیر | سَرَطان | ۲۲ ژوئن – ۲۲ ژوئیه |
۵ | ۳۱ | مرداد | اَسَد | ۲۳ ژوئیه – ۲۲ اوت |
۶ | ۳۱ | شهریور | سُنبُله | ۲۳ اوت – ۲۲ سپتامبر |
۷ | ۳۰ | مهر | میزان | ۲۳ سپتامبر – ۲۲ اکتبر |
۸ | ۳۰ | آبان | عَقرَب | ۲۳ اکتبر – ۲۱ نوامبر |
۹ | ۳۰ | آذر | قَوس | ۲۲ نوامبر – ۲۱ دسامبر |
۱۰ | ۳۰ | دی | جَدْی | ۲۲ دسامبر – ۲۰ ژانویه |
۱۱ | ۳۰ | بهمن | دَلو | ۲۱ ژانویه – ۱۹ فوریه |
۱۲ | ۲۹–۳۰ | اسفند | حوت | ۲۰ فوریه – ۲۰ مارس |
تبدیل تاریخ میلادی به شمسی
برای تبدیل تاریخ میلادی به تاریخ شمسی از الگوریتم زیر استفاده می کنیم:
۱- از ماه میلادی سه تا کم می کنیم تا ماه شمسی به دست آید.
۲- عدد ماه میلادی را به روز میلادی اضافه میکنیم. در این حالت روز شمسی به دست می آید.
عدد ماه میلادی به همراه تعداد روزهای آن در جدول زیر آمده است:
ژانویه | فوریه | مارس | آپریل | می | جون | جولای | اوت | سپتامبر | اکتبر | نوامبر | دسامبر | |
شماره ماه | ۱ | ۲ | ۳ | ۴ | ۵ | ۶ | ۷ | ۸ | ۹ | ۱۰ | ۱۱ | ۱۲ |
عدد ماه | ۱۰ | ۱۱ | ۹ | ۱۱ | ۱۰ | ۱۰ | ۹ | ۹ | ۹ | ۸ | ۹ | ۹ |
تعداد روزهای ماه | ۳۱ | ۲۸ | ۳۱ | ۳۰ | ۳۱ | ۳۰ | ۳۱ | ۳۱ | ۳۰ | ۳۱ | ۳۰ | ۳۱ |
مثلاً برای تبدیل روز ۲۰ اکتبر به معادل شمسی آن داریم:
۲۰ اکتبر معادل ۱۰/۲۰ است. اگر ماه میلادی سه ماه کم کنیم. ماه شمسی به دست میآید که ماه هفتم است یا همان مهر. حال عدد ماه میلادی را به روز میلادی اضافه میکنیم. عدد ماه اکتبر هشت است و بنابراین تبدیل تاریخ روز بیست و هشتم مهر ماه را به ما نتیجه می دهد. اگر بخواهیم مثلاً تاریخ ۲۸ اکتبر را به شمسی تبدیل کنیم باز از همین روش میتوان استفاده کرد. در این حالت ماه شمسی مهرماه بدست می آید و با اضافه کردن ۸ روز به روز میلادی روز ماه به دست که سی و ششم است. است چون ماه مهر ۳۰ روز است است بنابراین این حاصل ششم آبان ماه خواهد شد.
تبدیل تاریخ شمسی به میلادی
برای تبدیل تاریخ شمسی به میلادی از الگوریتم زیر استفاده می کنیم.
۱- سه ماه به ماه شمسی اضافه می کنیم.
۲- عدد ماه میلادی را از روز شمسی کم میکنیم. در این حالت باید توجه داشته باشیم که اطلاع از تعداد روز های ماه میلادی به دست آمده مهم است.
است مثلا اگر بخواهیم تاریخ ششم آبان ماه را به میلادی تبدیل کنیم ابتدا باید سه ماه به ماه شمسی اضافه کنیم. در این حالت ماه یازده انتخاب می شود. حال باید عدد ماه میلادی را از روز شمسی کم کنیم. عدد ماه یازدهم ۹ است. اگر این عدد را از روز ششم کم کنیم عدد منفی سه به دست می آید. یعنی از ماه یازدهم سه روز باید به عقب برگشت. ماه دهم سی و یک روز دارد که اگر سه روز به عقب برگردیم تاریخ ۲۸ اکتبر به دست می آید.
کد مربوط به برنامه تبدیل تاریخ میلادی به شمسی سی برای میکروکنترلر avr در نرم افزار کدویژن در زیر آورده شده است. در کد زیر تبدیل سال و محاسبه سال کبیسه نیز منظور گردیده است.
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.