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


2,899 نمایش پرینت از این مطلب

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

یکی از کاربرد های این کد که خودم هم مدت زیادی با ان سروکار داشتم در مورد کار با ای سی ds1307 هست همانطور که میدانید این ای سی یکreal time clock= RTC هست که علاوه برا کار های دیگر مثل شمارش ساعت ، روز و… تاریخ را به صورت میلادی محاسبه میکند که با استفاده از این کد میتوانید تاریخ را به شمسی تبدیل کنید.

اما در مورد نحوه استفاده از کد باید سال ،ماه و روز میلادی خود را همانطور که در برنامه توضیح داده شده است در متغیر های زیر قرار دهید.

Myear = 2008
Mday =28
Mmonth = 8
که در این کد تاریخ ۲۰۰۸/۰۸/۲۸ را به عنوان نمونه قرار دادیم خروجی این کد که در ان تاریخ به صورت شمسی تولید میشود به صورت زیر میباشد که در این مثال تاریخ ۱۳۸۷/۰۶/۰۷ میباشد.

خرید پستی ds1307

ds1307


در کد زیر متغیر Jday به عنوان خروجی روز تبدیل شده میباشد که میتوانید از این متغیر روز تاریخ شمسی تبدیل شده را بگیرید،خروجی ماه در این کد متغیر Jmonth و متغیر Jyear به عنوان خروجی سال شمسی میباشد هم چنین که متغیر Jdayofyear تعداد روز های سپری شده از ماه شمسی محاسبه شده از اول سال تا کنون را نمایش میدهد.

‘—————-http://www.yazdkit.com——————’
‘‘—————-http://www.yazdkit.ir——————-’
$regfile = “m16def.dat”
$crystal = 1000000
$lib “mcsbyteint.lbx”

Dim Myear As Integer ‘‘input Miladi(gregorian) Year
Dim Mday As Integer ‘input Miladi Day
Dim Mmonth As Integer ‘input Miladi Month
Dim Mdayofyear As Integer
Dim Myear_ As Integer

Dim Jday As Integer ‘output Jalali(shamsi) Day
Dim Jmonth As Integer ‘output Jalali Month
Dim Jyear As Integer ‘output Jalali Year
Dim Jdayofyear As Integer

Dim Gnumdayofyear As Integer
Dim Isleapyear As Bit
Dim Isleapyearp As Bit

Dim Iloop As Byte
Dim Temp1 As Integer
Dim Temp2 As Integer
Dim Temp3 As Integer
Dim Temp4 As Integer

Dim Jmonth_a(12) As Byte
Dim Mmonth_a(12) As Byte

Mmonth_a(1) = 31
‘——–۲۸ Ya ۲۹ Agar Sall Kabiseh Bashad In Mah ۲۹ Roz Mibashad——————–
Mmonth_a(2) = 28
Mmonth_a(3) = 31

Mmonth_a(4) = 30
Mmonth_a(5) = 31
Mmonth_a(6) = 30

Mmonth_a(7) = 31
Mmonth_a(8) = 31
Mmonth_a(9) = 30

Mmonth_a(10) = 31
Mmonth_a(11) = 30
Mmonth_a(12) = 31

Gnumdayofyear = 365

Myear = 2008 ’sample Miladi(gregorian) Year
Mday = 28 ’sample Miladi Day
Mmonth = 8 ’sample Miladi Month
‘————–shart Kabiseh Bodane Sall———— -
Temp1 = Myear Mod 4
Temp2 = Myear Mod 100
Temp3 = Myear Mod 400
Temp4 = Temp1 And Temp2

If Temp4 <> 0 Or Temp3 = 0 Then
Mmonth_a(2) = 28
Else
Mmonth_a(2) = 29
End If

Myear_ = Myear - 1
Temp1 = Myear_ Mod 4
Temp2 = Myear_ Mod 100
Temp3 = Myear_ Mod 400
Temp4 = Temp1 And Temp2

If Temp4 <> 0 Or Temp3 = 0 Then
Reset Isleapyearp
Else
Set Isleapyearp
End If

Temp1 = Mmonth - 1

For Iloop = 1 To Temp1
Mdayofyear = Mmonth_a(iloop) + Mdayofyear
Next
Mdayofyear = Mday + Mdayofyear

If Mdayofyear > 79 Then

Temp1 = Mdayofyear - 79
Jyear = Myear - 621

If Temp1 < 186 Then

Temp2 = Temp1 Mod 31
Temp3 = Temp1 / 31

If Temp2 = 0 Then
Jmonth = Temp3
Jday = 31
Else
Jmonth = Temp3 + 1
Jday = Temp2
End If

Else

Temp2 = Temp1 - 186
Temp3 = Temp2 Mod 30
Temp4 = Temp2 / 30

If Temp3 = 0 Then
Jmonth = Temp4 + 6
Jday = 30
Else
Jmonth = Temp4 + 7
Jday = Temp3
End If

End If

Else

Jyear = Myear - 622

If Isleapyearp = 1 Then
Mdayofyear = Mdayofyear + 11
Else
Mdayofyear = Mdayofyear + 10
End If

Temp2 = Mdayofyear Mod 30
Temp3 = Mdayofyear / 30

If Temp2 = 0 Then
Jmonth = Temp3 + 9
Jday = 30
Else
Jmonth = Temp3 + 10
Jday = Temp2
End If

Waitms 1

End If

دوستانی که قادر به تهیه آی سی ds1307 نیستند میتوانند از فروشگاه اینترنتی یزد کیت خریداری نمایند.

خرید پستی ds1307

ds1307

منبع : یزد کیت
سایت اختصاصی مدارات ،نرم افزار ومقالات الکترونیک

del.icio.us Facebook Digg balatrin.com Google Google Reader twitthis.com

کلمات کلیدی :برچسب‌ها, , , ,


مطالب مشابه :



۵ نظر برای این مطلب ارسال شده است



» مریم طیبی گفت : { ۳ اردیبهشت, ۱۳۸۸ - ۰۶:۰۲:۱۶ }
ISLAMIC REPUBLIC OF IRAN ISLAMIC REPUBLIC OF IRAN Internet Explorer Internet Explorer 6.0 Windows Windows XP

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

» دشتی گفت : { ۳ اردیبهشت, ۱۳۸۸ - ۰۶:۰۲:۵۴ }
ISLAMIC REPUBLIC OF IRAN ISLAMIC REPUBLIC OF IRAN Mozilla Firefox Mozilla Firefox 3.0.3 Windows Windows XP

با سلام
در مورد سوالتون شما منظور از متحرک چیست ؟ مثلا ساعت از سمت چپ وارد صفحه بشه وبعد خارج بشه ? و بعدش تاریخ و…
در مورد شماتیک برنامه شما ، براحتی میشه در برنامه تغییرات ایجاد کرد و طبق شماتیک پیاده کرد یا این که اگه خواستیم خودمون یه مدار و نقشه جدید طراحی کنیم.
در ضمن ویزگی پروژه تون را در تالار گفتمان مطرح کنید تا راحتر بتوان پاسخ داد و برنامه را دنبال کرد .با تشکر

» ABARYAZDKIT گفت : { ۱۴ دی, ۱۳۸۸ - ۰۸:۱۰:۲۵ }
ISLAMIC REPUBLIC OF IRAN ISLAMIC REPUBLIC OF IRAN Internet Explorer Internet Explorer 8.0 Windows Windows XP

آیا در pic هم از این روش می توان استفاده کرد .
باتشکر.

» مجید گفت : { ۱۷ بهمن, ۱۳۸۸ - ۰۷:۱۱:۱۶ }
ISLAMIC REPUBLIC OF IRAN ISLAMIC REPUBLIC OF IRAN Mozilla Firefox Mozilla Firefox 3.5.5 Windows Windows XP

سلام
من یه مشکل دارم. زمانی که این کد رو توی یه حلقه قرار میدم و متغیر های روز و ماه و سال شمسی رو روی lcd نمایش میدم روز و ماه شروع به شمردن میکنن و کد بلا استفاده میشه. لطفا کمکم کنید
ضمنا من از میکرو atmega 8 استفاده میکنم.نیاز به کمک فوری دارم. با تشکر.

» مجید گفت : { ۲۰ بهمن, ۱۳۸۸ - ۱۲:۱۱:۰۹ }
ISLAMIC REPUBLIC OF IRAN ISLAMIC REPUBLIC OF IRAN Mozilla Firefox Mozilla Firefox 3.5.5 Windows Windows XP

مساله با صفر کردن متغیرها حل شد.اما یه مساله مهم.!!! من کد تبدیل شمسی به میلادی رو هم لازم دارم آخه من تو پروژه ام برای تنظیم تاریخ و ساعت از کیپد استفاده میکنم و از ds1307.بعد از دادن تاریخ شمسی با کیپد که اونم روی lcd باید نشون داده بشه همونطور که میدونید این تغییرات باید به ds1307 ارسال بشه که اونم باید به میلادی باشه.
والا سعی کردم کد بالا رو تحلیل کنم و خودم کدی رو که میخوامو بنویسم اما تا حالا نتونستم.اگه کسی میتونه به من کمک کنه ممنون میشم آخه خیلی گیرم!pleas help me


ارسال نظر