آموزش و تدریس خصوصی زبانهای برنامه نویسی

آموزش گام به گام برنامه نویسی توسط ابوالفضل ایمانی

فرمول تبدیل تاریخ میلادی به شمسی و بر عکس

فرمول تبدیل تاریخ میلادی به شمسی و بر عکس


براي تبديل تاريخ شمسي به ميلادي و برعکس بايد تعداد روزهاي سپري شده از ابتداي هر کدام از اين تاريخ‌ها را از مبدا خود به دست بياوريم. اگر مي‌خواهيم تاريخ شمسي را به ميلادي تبديل کنيم ابتدا بايد روزهاي سپري شده از مبدا تاريخ شمسي تا کنون را حساب کنيم و آن را به اضافه‌‌ي 226899 بکنيم. عدد به دست آمده تعداد روزهاي گذشته از ابتداي تاريخ ميلادي تا کنون است و با استفاده از آن مي‌توانيم تاريخ ميلادي را حساب کنيم. براي تبديل تاريخ ميلادي به شمسي همين کار را بايد برعکس انجام بدهيم و عدد 226899 را بايد از تعداد روزهاي تاريخ ميلادي کم بکنيم و در اين قسمت عدد به دست آمده تاريخ شمسي است.
همين روش نيز براي تبديل تاريخ قمري به شمسي و برعکس نيز قابل استفاده است. ولي در اين مورد ديگر عددي که بايد اضافه يا کم بشود 226899 نيست.
شايد از خود بپرسيد که عدد 226899 را از کجا به دست آورده‌‌ام. براي به دست آوردن اين عدد بايد تاريخ شمسي و ميلادي يک روز را در اختيار داشته باشيد. به عنوان مثال 13/4/1383 شمسي طبق تقويم برابر 3/7/2004 ميلادي است. کاري که بايد الا بکنيم اين است که اين دو تاريخ را به روز تبديل کنيم و در اين تبديل بايد تعداد سال‌هاي کبيسه‌اي که اين دو تاريخ پشت سر گذاشته‌اند نيز فراموش نکنيم. براي اينکه تعداد سال‌هاي کبيسه را در دو تقويم ميلادي و شمسي بخواهيم محاسبه کنيم بايد 1382 را براي تقويم شمسي و 2003 را براي تقويم ميلادي تقسيم بر 4 کنيم. خارخ قسمت اين دو تقسيم به ترتيب تعداد سال‌هاي کبيسه‌ي تقويم شمسي و ميلادي است که از ابتداي شروع به کار اين تقويم‌ها تا کنون پشت سر گذاشته‌اند. البته اين اعداد مطابق واقعيت نيستند! ولي به محاسبات ما اشکالي وارد نمي‌کنند.
در تقسيم 1382 بر 4 خارج قسمت برابر 345 مي‌شود و اين عدد براي تقويم ميلادي برابر 500 است.
خب پس تا کنون بر اساس تقويم شمسي 345 سال کبيسه بوده و بر اساس تقويم ميلادي 500 سال برابر سال کبيسه بوده‌اند. (البته همان طور که ديد به کبيسه بودن سالي که در آن هستيم هنوز توجهي نکرديم.(
خب برگرديم به مساله‌ي خودمان که مي‌خواستيم دو تاريخ 13/4/1383 و 3/7/2004 به روز تبديل کنيم.
براي اين کار بايد از عدد سال يکي کم کرده و در 365 ضرب کنيم. و از عدد ماه نيز بايد يکي کم کرده و بر اساس نوع تقويم بايد عدد ماه را ضرب در عدد خاصي بکنيم. مثلا وقتي در تاريخ شمسي از عدد ماه يکي کم کنيم حاصل 3 مي‌شود. همان طور که مي‌دانيد در تقويم شمسي 3 ماه اول سال 31 روز دارند، پس 3 را در 31 ضرب مي‌کنيم. ولي در تاريخ شمسي وقتي از 7 يکي کم کينم برابر 6 مي‌شود. خب بايد در اين مورد ببينيم که 6 ماه اول سال ميلادي چند روزه هستند.
ماه اول ميلادي = 31 روز
ماه دوم ميلادي = 28 روز (در سال کبيسه 29 روز (
ماه سوم ميلادي = 31 روز
ماه چهارم ميلادي = 30 روز
ماه پنجم ميلادي = 31 روز
ماه ششم ميلادي = 30 روز
ماه هفتم ميلادي = 31 روز
ماه هشتم ميلادي = 31 روز
ماه نهم ميلادي = 30 روز
ماه دهم ميلادي = 31 روز
ماه يازدهم ميلادي = 30 روز
ماه داوزدهم ميلادي = 31 روز
طبق جدول بالا 6 ماه اول سال 2004 ميلادي برابر 182 روز مي‌باشد. (فراموش نکنيد که سال 2004 سال کبيسه است.) خب تا حالا عدد سال و ماه را به روز تبديل کرديم و اين دو عدد را بايد به اضافه‌ي عدد روز کنيم و در آخر به اضافه‌ي تعداد سال‌هاي کبيسه گذشته بکنيم. داريم
A = (1382*365)+(3*31)+13+345 = 504881
B= (2003*365)+(31+29+31+30+31+30)+3+500=731780
B-A = 226899
با محاسبات فوق خواستم نشان بدهم که عدد 226899 که در اول بحث گفتيم را از کجا آورديم. همان طور که احتمالا تا حالا فهميديد اين عدد (226899) تفاوت مبداهاي دو تقويم ميلادي و شمسي به روز هستند.
حال مثالي مي‌زنم براي تبديل تاريخ شمسي به تاريخ ميلادي. فرض کنيد که مي‌خواهيم که تاريخ 15/4/1383 شمسي را به تاريخ ميلادي نظير آن تبديل کنيم. در ابتدا بايد اين تاريخ را به روز تبديل کنيم. طبق روش گفته شده در بالا مي‌نويسيم:
C =[(1383-1)*365]+[(4-1)*31]+15+345 = 504883
خب اين عدد را بايد به اضافه‌ي 226899 بکنيم:
504883+226899 = 731782
حال بايد 731782 را به تاريخ ميلادي متناظر آن تبديل کنيم.
ابتدا بايد تعدا سال‌هاي کبيسه‌ي تقويم ميلادي را از اين عدد کنيم، در بالا ديديم که تقويم ميلادي تا کنون 500 سال کبيسه را پشت سر گذاشته است.
731782-500=731282
حال 731282 را بر 365 تقسيم مي‌کنيم و خارج قسمت آن را به اضافه‌ي يک مي‌کنيم و عدد به دست آمده عدد سال است:
731282 / 365 = 2003
2003 + 1= 2004
باقيمانده‌ي تقسيم فوق برابر 187 مي‌باشد. حال با استفاده از جدول تعداد روز‌هاي تقويم ميلادي شروع مي‌کنيم از 187 کم مي‌کنيم و باز هم فراموش نمي‌کنيم که سال 2004 ميلادي سال کبيسه است :
187-31=156
156-29=127
127-31=96
96-30=66
66-31=35
35-30=5
خب تفريق‌هاي فوق را تا جايي ادامه مي‌دهيم که عدد به دست آمده کمتر از تعداد روزهاي يک ماه باشند. در بالا 6 مرحله تفريق انجام دهيم به عدد 6 بايد يک بيافزاييم تا تعداد ماه‌ها به دست آيد. و عدد ظاهر شده در تفريق آخر نيز برابر عدد روز مي‌باشد. پس با محاسبات فوق ديديم که تاريخ 15/4/1383 شمسي برابر 5/7/2004 است.
اين روش کلي تبديل دو تاريخ به يکديگر است. و براي تبديل انواع تقويم به هم بايد اين مراحل را انجام داد ولي با توجه به نوع تقويم‌ها عددهايي که بايد اضافه يا کم بشود طبعا فرق مي‌کند.
موفق باشيد

 

یک مقاله دیگه درباره تبدیل تاریخ شمسی به میلادی و تبدیل میلادی به شمسی و ...

برای مشاهده مقاله Shamsi.dll می توانید به شمسی دی ال ال Shamsi.dll بروید

+ نوشته شده در  یکشنبه بیست و یکم بهمن 1386ساعت 21:10  توسط ابوالفضل ایمانی  |