اطلاعیه

Collapse
No announcement yet.

چطوری میشه تاریخ میلادی گرفته شده از RTC ها را به شمسی تبدیل کرد (کمک کنید)

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    چطوری میشه تاریخ میلادی گرفته شده از RTC ها را به شمسی تبدیل کرد (کمک کنید)

    باسلام
    خدمت دوستان عزیز

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

    از دوستان خواهش می کنم کمکم کنید .

    هرچند هیچوقت کسی تو این انجمن از کمک کردن به دیگران دریغ نمی کنه .


    موفق باشید .
    [left][move][b][color=green][size=11pt]ما می توانیم .
    ، همین ... *. * * *. * * * [color=re

    #2
    پاسخ : چطوری میشه تاریخ میلادی گرفته شده از RTC ها را به شمسی تبدیل کرد (کمک کنید)

    سلام
    بعد از کلی کشتن خودم راهشو پیدا کردم .گفتم اینجا بنویسم تا اگه بعدا کسی با یه همچین مشکلی برخورد کرد بدون باید چیکار کنه . :agree:


    برای تبدیل سال شمسی به میلادی چنانچه روز مورد نظر بین اول فروردین تا 11 دی باشد عدد 621 و اگر روز مورد نظر بین 11 دی تا آخر اسفند باشد.عدد 622را به سال شمسی می افزاییم تا سال میلادی به دست آید.

    مثلا 22 بهمن (برابر با 11 فوریه) سال 57 شمسی مطابق با 1979=622+1357 میلادی می باشد.

    14 خرداد (برابر با 4 ژوئن) سال 1368 شمسی برابر با 1989=621+1368 میلادی می باشد.





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

    روز مورد نظر بین اول ژانویه تا 21 مارس باشد عدد 622 و اگر روز مورد نظر بین 22 مارس تا آخر دسامبر باشد عدد 621 را از سال میلادی کسر می کنیم.

    مثلا 26 ژانویه (6 بهمن) 1978 میلادی برابر است با 1356=622- 1978 شمسی

    یا 6 گوست (15 مرداد) 1945 میلادی برابر است با 1324=621- 1945 شمسی





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

    هر سال قمری تقریبا 10 روز و 21 ساعت از سال شمسی کوتاه تر است یعنی هر 33 سال شمسی برابر 34 سال قمری است بنا بر این برای تبدیل سال شمسی به قمری عدد سال شمسی را بر 33 تقسیم کرده حاصل را با عدد سال شمسی جمع میکنیم .

    مثال

    سال 1373 شمسی برابر است با 1414 قمری 1414=14+1373 41=33 ÷ 1373

    برای تبدیل سال قمری به سال شمسی عدد سال قمری را بر 34 تقسیم کرده حاصل را از عدد سال قمری کم میکنیم

    مثال

    سال1414 قمری برابر است با 1373 شمسی 1373=41 - 1414 41=34 ÷ 1414






    موفق باشید :icon_razz:
    [left][move][b][color=green][size=11pt]ما می توانیم .
    ، همین ... *. * * *. * * * [color=re

    دیدگاه


      #3
      پاسخ : چطوری میشه تاریخ میلادی گرفته شده از RTC ها را به شمسی تبدیل کرد (کمک کنید)

      یه مطلب جالب دیگه که خودنش بد نیست را هم اینجا مینویسم



      با داشتن تاریخ هر روز از ماه ,روز آن تاریخ را محاسبه کنیم


      قرار داد ها :

      ابتدا لازم است یکی دو قرار داد را برای بهتر انجام دادن این کار بیان کنیم

      ۱- روز جمعه را به عنوان ۶ شنبه میشناسیم

      ۲- اگر اولین روز ماه شنبه باشد آن را به عنوان ۷ شنبه در نظر می گیریم

      اکنون به طریقه محاسبه تاریخ روزهای هر ماه دقت کنید

      هر ماه دارای رمزی می باشد . برای یافتن رمز هر ماه به اولین روز آن ماه مراجعه کنید. از روزی که اولین روز ماه باشد یکی کم میکنیم. مثال اگر اولین روز ماهی سه شنبه باشد رمز آن ماه برابر است با ۲=۱-۳ یعنی رمز آن ماه ۲ است. اگر اولین روز ماهی جمعه باشد طبق قرار داد شماره ۱ خواهیم داشت ۵=۱-۶ یعنی رمز آن ماه ۵ است و برای ماهی که اولین روز آن شنبه باشد طبق قرار داد شماره ۲ رمز آن ماه ۶ به دست می آید.به این مطلب نیز توجه کنید که اگر اولین روز ماهی یکشنبه باشد رمز آن ماه برابر با صفر خواهد بود.

      اکنون که با یافتن رمز هر ماه آشنا شدیم طریقه محاسبه روزهای هر ماه را خدمت شما عرض میکنم

      برای انجام این کار رمز هر ماه را به تاریخی که داریم اضافه میکنیم .عدد حاصل را بر ۷ تقسیم می کنیم. باقیمانده این تقسیم برابر با روز آن تاریخ می باشد

      مثال :

      اولین روز فروردین ماه سال ۱۳۸۴ روز دوشنبه است. برای محاسبه رمز این ماه همانگونه که عرض شد داریم ۱=۱-۲

      اکنون میخواهیم بدانیم مثلا ۱۸ فروردین چند شنبه است. ابتدا عدد رمز یعنی ۱ را با تاریخ خواسته شده یعنی ۱۸ جمع میکنیم داریم ۱۹=۱+۱۸ اکنون عدد حاصل یعنی ۱۹ را بر ۷ تقسیم میکنیم . باقیمانده این تقسیم برابر با ۵ است بنابر این ۱۸ فروردین سال ۸۴ روز پنجشنبه است.

      مثالی دیگر:اولین روز مرداد ماه سال ۸۴ روز شنبه است پس رمز این ماه برابر با عدد ۶ خواهد بود.

      فرض کنید میخواهیم بدانیم ۱۵ مرداد چندشنبه است. عدد ۱۵ را با رمز ماه یعنی ۶ جمع میکنیم . داریم ۲۱=۶+۱۵ اکنون عدد ۲۱ را بر عدد ۷ تقسیم میکنیم. باقیمانده تقسیم برابر با صفر خواهد بود.پس ۱۵ مردادماه سال ۸۴ روزشنبه است.


      موفق باشید
      [left][move][b][color=green][size=11pt]ما می توانیم .
      ، همین ... *. * * *. * * * [color=re

      دیدگاه


        #4
        پاسخ : چطوری میشه تاریخ میلادی گرفته شده از RTC ها را به شمسی تبدیل کرد (کمک کنید)

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

        کد:
        $regfile = "M128def.dat"
        $lib "mcsbyteint.lbx"
        
        
        Dim Gyear As Integer                    'input gregorian(miladi) year
        Dim Gday As Integer                     'input gregorian day
        Dim Gmonth As Integer                    'input gregorian month
        Dim Gdayofyear As Integer
        Dim Gyear_ 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 Gmonth_a(12) As Byte
        
        Gmonth_a(1) = 31
        Gmonth_a(2) = 28
        Gmonth_a(3) = 31
        
        Gmonth_a(4) = 30
        Gmonth_a(5) = 31
        Gmonth_a(6) = 30
        
        Gmonth_a(7) = 31
        Gmonth_a(8) = 31
        Gmonth_a(9) = 30
        
        Gmonth_a(10) = 31
        Gmonth_a(11) = 30
        Gmonth_a(12) = 31
        
        Gnumdayofyear = 365
        
        Gyear = 2006                        'Sample gregorian (miladi) Year
        Gday = 11                          'Sample gregorian day
        Gmonth = 11                         'Sample gregorian month
        
        Temp1 = Gyear Mod 4
        Temp2 = Gyear Mod 100
        Temp3 = Gyear Mod 400
        Temp4 = Temp1 And Temp2
        
        If Temp4 <> 0 Or Temp3 = 0 Then
          Gmonth_a(2) = 28
        Else
          Gmonth_a(2) = 29
        End If
        
        
        Gyear_ = Gyear - 1
        Temp1 = Gyear_ Mod 4
        Temp2 = Gyear_ Mod 100
        Temp3 = Gyear_ Mod 400
        Temp4 = Temp1 And Temp2
        
        If Temp4 <> 0 Or Temp3 = 0 Then
         Reset Isleapyearp
        Else
         Set Isleapyearp
        End If
        
        Temp1 = Gmonth - 1
        
        For Iloop = 1 To Temp1
          Gdayofyear = Gmonth_a(iloop) + Gdayofyear
        Next
        Gdayofyear = Gday + Gdayofyear
        
        
        If Gdayofyear > 79 Then
        
          Temp1 = Gdayofyear - 79
          Jyear = Gyear - 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 = Gyear - 622
        
          If Isleapyearp = 1 Then
           Gdayofyear = Gdayofyear + 11
          Else
           Gdayofyear = Gdayofyear + 10
          End If
        
          Temp2 = Gdayofyear Mod 30
          Temp3 = Gdayofyear / 30
        
          If Temp2 = 0 Then
           Jmonth = Temp3 + 9
           Jday = 30
          Else
           Jmonth = Temp3 + 10
           Jday = Temp2
          End If
        
          Waitms 1
        There is nothing so practical as a good theory. — Kurt Lewin, 1951

        دیدگاه


          #5
          پاسخ : چطوری میشه تاریخ میلادی گرفته شده از RTC ها را به شمسی تبدیل کرد (کمک کنید)

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

          کد:
          $regfile = "M128def.dat"
          $lib "mcsbyteint.lbx"
          
          
          Dim Gyear As Integer                    'input gregorian(miladi) year
          Dim Gday As Integer                    'input gregorian day
          Dim Gmonth As Integer                   'input gregorian month
          Dim Gdayofyear As Integer
          Dim Gyear_ 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 Gmonth_a(12) As Byte
          
          Gmonth_a(1) = 31
          Gmonth_a(2) = 28
          Gmonth_a(3) = 31
          
          Gmonth_a(4) = 30
          Gmonth_a(5) = 31
          Gmonth_a(6) = 30
          
          Gmonth_a(7) = 31
          Gmonth_a(8) = 31
          Gmonth_a(9) = 30
          
          Gmonth_a(10) = 31
          Gmonth_a(11) = 30
          Gmonth_a(12) = 31
          
          Gnumdayofyear = 365
          
          Gyear = 2006                        'Sample gregorian (miladi) Year
          Gday = 11                         'Sample gregorian day
          Gmonth = 11                        'Sample gregorian month
          
          Temp1 = Gyear Mod 4
          Temp2 = Gyear Mod 100
          Temp3 = Gyear Mod 400
          Temp4 = Temp1 And Temp2
          
          If Temp4 <> 0 Or Temp3 = 0 Then
           Gmonth_a(2) = 28
          Else
           Gmonth_a(2) = 29
          End If
          
          
          Gyear_ = Gyear - 1
          Temp1 = Gyear_ Mod 4
          Temp2 = Gyear_ Mod 100
          Temp3 = Gyear_ Mod 400
          Temp4 = Temp1 And Temp2
          
          If Temp4 <> 0 Or Temp3 = 0 Then
           Reset Isleapyearp
          Else
           Set Isleapyearp
          End If
          
          Temp1 = Gmonth - 1
          
          For Iloop = 1 To Temp1
           Gdayofyear = Gmonth_a(iloop) + Gdayofyear
          Next
          Gdayofyear = Gday + Gdayofyear
          
          
          If Gdayofyear > 79 Then
          
           Temp1 = Gdayofyear - 79
           Jyear = Gyear - 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 = Gyear - 622
          
           If Isleapyearp = 1 Then
             Gdayofyear = Gdayofyear + 11
           Else
             Gdayofyear = Gdayofyear + 10
           End If
          
           Temp2 = Gdayofyear Mod 30
           Temp3 = Gdayofyear / 30
          
           If Temp2 = 0 Then
             Jmonth = Temp3 + 9
             Jday = 30
           Else
             Jmonth = Temp3 + 10
             Jday = Temp2
           End If
          
           Waitms 1

          دوست عزیز سلام

          دست شما درد نکنه .
          مطلب جالب و خوبی بود .
          یک امتیاز مثبت هم هدیه من به شما بخاطر پاسختون. :agree:
          برنامه مشابه این سراغ ندارید که من بتونم برای میکرو استفاده کنم ؟؟؟؟؟

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


          موفق باشید
          [left][move][b][color=green][size=11pt]ما می توانیم .
          ، همین ... *. * * *. * * * [color=re

          دیدگاه


            #6
            پاسخ : چطوری میشه تاریخ میلادی گرفته شده از RTC ها را به شمسی تبدیل کرد (کمک کنید)

            سلام دوست عزیز، دستتون درد نکنه :smile:

            این الگوریتمی رو که گفتم از اینجا می تونید بخونید:

            http://radcom.ir/weblog/fatemeh/archive/2005/04/17/244.aspx

            شما با چه کامپایلری و با چه میکرویی کار می کنید؟
            There is nothing so practical as a good theory. — Kurt Lewin, 1951

            دیدگاه


              #7
              پاسخ : چطوری میشه تاریخ میلادی گرفته شده از RTC ها را به شمسی تبدیل کرد (کمک کنید)

              نوشته اصلی توسط shockley
              سلام دوست عزیز، دستتون درد نکنه :smile:

              این الگوریتمی رو که گفتم از اینجا می تونید بخونید:

              http://radcom.ir/weblog/fatemeh/archive/2005/04/17/244.aspx

              شما با چه کامپایلری و با چه میکرویی کار می کنید؟
              سلام
              با میکروکنترلر پیک کار انجام میدم .
              و به زبان بیسیک آشنا ترم .
              با کامپایلر پیک بیسیک پرو.


              با تشکر از لطفتون .


              موفق باشید :smile:
              [left][move][b][color=green][size=11pt]ما می توانیم .
              ، همین ... *. * * *. * * * [color=re

              دیدگاه


                #8
                پاسخ : چطوری میشه تاریخ میلادی گرفته شده از RTC ها را به شمسی تبدیل کرد (کمک کنید)

                سلام،

                این برنامه برای AVR نوشته شده اما با کمی تغییر می تونید با PIC BASIC کامپایلش کنید.

                موفق باشید.
                There is nothing so practical as a good theory. — Kurt Lewin, 1951

                دیدگاه


                  #9
                  پاسخ : چطوری میشه تاریخ میلادی گرفته شده از RTC ها را به شمسی تبدیل کرد (کمک کنید)

                  سلام.
                  من این پست رو قبلا یک بار دادم ولی بخاطر اشکال در تغییرات سرور حذف شده .
                  بهر حال لینک زیر شامل سه تابع بزبان ویژوال بیسیک هست که من تواکثر برنامه ها از اون استفاده می کنم .
                  اولی تبدیل میلادی به شمسی . با در نظر گرفت نام ماه شمسی وسالهای کبیسه. دومی تست صحیح بودن تاریخ شمسی و سومی تبدیل تاریخ شمسی به میلادی.
                  امید وارم بتونید الگوریتم مورد نظرتون رو از توش در بیارین وبدردتون بخوره :

                  http://www.4shared.com/file/10088036/aada1733/convert-date.html

                  موفق باشید.
                  خبرآمد خبري در راه است
                  سرخوش آن دل كه از آن گاه است

                  دیدگاه


                    #10
                    پاسخ : چطوری میشه تاریخ میلادی گرفته شده از RTC ها را به شمسی تبدیل کرد (کمک کنید)

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


                    موفق باشید :smile:
                    [left][move][b][color=green][size=11pt]ما می توانیم .
                    ، همین ... *. * * *. * * * [color=re

                    دیدگاه


                      #11
                      پاسخ : چطوری میشه تاریخ میلادی گرفته شده از RTC ها را به شمسی تبدیل کرد (کمک کنید)

                      سلام بر همگی دوستان.
                      ممنون از shockley عزیز برای این برنامه تبدیل تاریخ میلادی به شمسی.
                      من یک سوال برام پیش آمد و اون این بود که نقش این کتابخانه "mcsbyteint.lbx" چی هست؟(و در برنامه چه کاری انجام می دهد؟)
                      آخه من این برنامه را به زبان پیک بیسیک نوشتم و اون این توابع را ندارد.
                      با تشکر.
                      موفق و پیروز باشید.
                      زهر است عطاي خلق هر چند كه دوا باشد***حاجت ز كه مي خواهي جايي كه خدا باشد

                      دیدگاه

                      لطفا صبر کنید...
                      X