Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Persian
  4. تقویم جلالی در کیوت ۴٫۹
Qt 6.11 is out! See what's new in the release blog

تقویم جلالی در کیوت ۴٫۹

Scheduled Pinned Locked Moved Persian
17 Posts 6 Posters 22.1k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R Offline
    R Offline
    Ramin7000
    wrote on last edited by
    #8

    @
    QString JalaliCalendar::jDate()
    {
    QDate Today;
    QDate chkFirst,chkSecound;
    Today = QDate::currentDate();
    chkFirst.setDate(Today.year(),2,1);
    chkSecound.setDate(Today.year(),3,1);
    int IsKabisah = (chkFirst.daysTo(chkSecound))==29 ? 1 : 0 ;
    QString jsYear,jsMonth,jsDay;
    int jYear,jMonth,jDay;
    QString space=" / ";

    if(Today > QDate(Today.year(),3,20-IsKabisah) && Today <=QDate(Today.year(),4,20-IsKabisah)) {
        jYear = Today.year()-621; jMonth =1;jDay=Today.daysTo(QDate(Today.year(),3,20-IsKabisah));} //فروردین
    if(Today > QDate(Today.year(),4,20-IsKabisah) && Today <=QDate(Today.year(),5,21-IsKabisah)) {
        jYear = Today.year()-621; jMonth =2;jDay=Today.daysTo(QDate(Today.year(),4,20-IsKabisah));} //اردیبهشت
    if(Today > QDate(Today.year(),5,21-IsKabisah) && Today <=QDate(Today.year(),6,21-IsKabisah)) {
        jYear = Today.year()-621; jMonth =3;jDay=Today.daysTo(QDate(Today.year(),5,21-IsKabisah));} //خرداد
    
    if(Today > QDate(Today.year(),6,21-IsKabisah) && Today <=QDate(Today.year(),7,22-IsKabisah)) {
        jYear = Today.year()-621; jMonth =4;jDay=Today.daysTo(QDate(Today.year(),6,21-IsKabisah));} //تیر
    if(Today > QDate(Today.year(),7,22-IsKabisah) && Today <=QDate(Today.year(),8,22-IsKabisah)) {
        jYear = Today.year()-621; jMonth =5;jDay=Today.daysTo(QDate(Today.year(),7,22-IsKabisah));} //مرداد
    if(Today > QDate(Today.year(),8,22-IsKabisah) && Today <=QDate(Today.year(),9,23-IsKabisah)) {
        jYear = Today.year()-621; jMonth =6;jDay=Today.daysTo(QDate(Today.year(),8,22-IsKabisah));} //شهریور
    
    if(Today > QDate(Today.year(),9,22-IsKabisah) && Today <=QDate(Today.year(),10,22-IsKabisah)) {
        jYear = Today.year()-621; jMonth =7;jDay=Today.daysTo(QDate(Today.year(),9,22-IsKabisah));} //مهر
    if(Today > QDate(Today.year(),10,22-IsKabisah) && Today <=QDate(Today.year(),11,21-IsKabisah)) {
        jYear = Today.year()-621; jMonth =8;jDay=Today.daysTo(QDate(Today.year(),10,22-IsKabisah));} //آبان
    if(Today > QDate(Today.year(),11,21-IsKabisah) && Today <=QDate(Today.year(),12,21-IsKabisah)) {
        jYear = Today.year()-621; jMonth =9;jDay=Today.daysTo(QDate(Today.year(),11,21-IsKabisah));} //آذر
    
    if(Today > QDate(Today.year(),12,21-IsKabisah) && Today <=QDate(Today.year(),1,20-IsKabisah)) {
        jYear = Today.year()-621; jMonth =10;jDay=Today.daysTo(QDate(Today.year(),12,21-IsKabisah));} //دی
    if(Today > QDate(Today.year(),1,20-IsKabisah) && Today <=QDate(Today.year(),2,19-IsKabisah)) {
        jYear = Today.year()-(Today.day()>11+IsKabisah)?622:621; jMonth =11;jDay=Today.daysTo(QDate(Today.year(),1,20-IsKabisah));} //بهمن
    if(Today > QDate(Today.year(),2,19-IsKabisah) && Today <=QDate(Today.year(),4,20-IsKabisah)) {
        jYear = Today.year()-622; jMonth =12;jDay=Today.daysTo(QDate(Today.year(),2,19-IsKabisah));} //اسفند
    
    jsYear = QString::number(jYear);
    jsMonth = QString::number(jMonth);
    jsDay = QString::number(-jDay);
    
    return jsYear +space+ jsMonth +space+ jsDay;
    

    }
    @

    Ramin Lohrasbi

    1 Reply Last reply
    0
    • R Offline
      R Offline
      Ramin7000
      wrote on last edited by
      #9

      :)

      Ramin Lohrasbi

      1 Reply Last reply
      0
      • M Offline
        M Offline
        mohsen
        wrote on last edited by
        #10

        p{direction:rtl;text-align:right}. این دیگه چجور الگوریتمیه!

        1 Reply Last reply
        0
        • R Offline
          R Offline
          Ramin7000
          wrote on last edited by
          #11

          کاملا" وابسته به تاریخ میلادی سیستم هستش
          اول چک می کنیم که سال کبیسه هست یا نه
          بعد بر اساس این تشخیص ماه های سال مشخص می شن
          خیلی ساده و راحت
          فقط باید تاریخ خود سیستم درست ست شده باشه
          آلگوریتمشو خودم نوشتم
          و تستش کردم اگر اشتباهی مشاهده کردید لطفا" بهم اطلاع بدید
          توی تستی که کردم خطا نداشت

          Ramin Lohrasbi

          1 Reply Last reply
          0
          • M Offline
            M Offline
            mohsen
            wrote on last edited by
            #12

            p{direction:rtl; text-align:right}. ببخشید ولی اصلا جالب نیست. البته نظر شخصیه منه. 12 بار مقایسه تاریخ، بارگذاری اینهمه آبجکت و استفاده از فانکشن های محاسباتی زیاد فقط برای تبدیل تاریخ! سال های کبیسه با فرمول قابل تشخیص هستند و نیازی به اینکار نیست. به نظرم کمی در مورد الگوریتم های تبدیل تاریخ مطالعه کنید و یک فانکشن تمیز، منطقی و با سرعت بنویسید.

            1 Reply Last reply
            0
            • R Offline
              R Offline
              Ramin7000
              wrote on last edited by
              #13

              ممنون از راهنماییتون . البته می تونستم ساده ترش کنم . فقط بخاطر اینکه گویا باشه اینکارو نکردم . ولی فکر می کنم این سرعتش از بقیه الگوریتم ها بیشتر باشه . چون فقط تو بازه مقایسه ای قرار می گیره. قبول دارم که تکنیکی نیست . اما دلیلی ندیدم که بخوام تاریخی رو محاسبه کنم که پایه اون همون تاریخ میلادی هستش که سیستم رو خودش داره. چون به هر حال همه می دونیم اساسا" تاریخ شمسی روی سیستم ها پایه گذاری نشده.
              البته دو سه تا آبجکت بیشتر نیست و فکر نمی کنم زیاد باشه :)
              موفق باشید

              Ramin Lohrasbi

              1 Reply Last reply
              0
              • S Offline
                S Offline
                soroush
                wrote on last edited by
                #14

                p{direction:rtl; text-align:right}. این الگوریتم غلطه. خیلی چیزها درنظر گرفته نشده. مثلاً این که هر سی و سه سال یک بار سال کبیسه نداریم. و این که هر صد و بیست و هفت سال یک‌بار دو سال کبیسهٔ پشت سر هم داریم. همچنین تداخل این نوع محاسبات با سال‌های کبیسهٔ میلادی و روزهای گمشدهٔ گریگوری درنظر گرفته نشده.

                p{direction:rtl; text-align:right}. ساده بگم، این الگوریتم برای قبل از سال ۷۵ شمسی و بعد از سال ۲۰۱۷ میلادی یکی دو روز جابجایی خواهد داشت.

                1 Reply Last reply
                0
                • R Offline
                  R Offline
                  Ramin7000
                  wrote on last edited by
                  #15

                  سروش عزیز سلام
                  این الگوریتم کاملا" به تاریخ تنظیم شده سیستم وابسته هستش!
                  اگر توی سیستم کبیسه تعریف نشده باشه این الگوریتم هم از خودش تعریفی نخواهد داشت.
                  به نظرم خیلی توجه نکردید.
                  ممنون از نظرتون

                  Ramin Lohrasbi

                  1 Reply Last reply
                  0
                  • S Offline
                    S Offline
                    soroush
                    wrote on last edited by
                    #16

                    [quote author="Ramin7000" date="1354184526"]سروش عزیز سلام
                    این الگوریتم کاملا" به تاریخ تنظیم شده سیستم وابسته هستش!
                    اگر توی سیستم کبیسه تعریف نشده باشه این الگوریتم هم از خودش تعریفی نخواهد داشت.
                    به نظرم خیلی توجه نکردید.
                    ممنون از نظرتون[/quote]

                    p{direction:rtl; text-align:right}. مسأله اینه که توی تاریخ سیستم کبیسه‌ها درنظر گرفته شدن. اگه می‌خوای یه الگوریتم خوب بنویسی یه همچین کدی نیاز داری:

                    @
                    bool QJalaliDate::isLeapYear(const int& year)
                    {
                    int a = (year + 2345) % 2820;
                    if(a == 2819)
                    return true;
                    else
                    {
                    int b = a8;
                    int c;
                    if(b < 29)
                    c = b;
                    else
                    c = (b-29) % 33;
                    if(c==0)
                    return false;
                    else if(c%4 == 0)
                    return true;
                    else
                    return false;
                    }
                    }
                    @

                    1 Reply Last reply
                    0
                    • M Offline
                      M Offline
                      m_pahlevanzadeh
                      wrote on last edited by
                      #17

                      تا اونجا که یادمه تقویم هایی که وابسته به میلادی هستند همیشه یه جایی سوتی میدن. خیام طبق یه الگوریتم اومده در مورد تقویم جلالی یه حرف‌هایی زده که هر ۱۸۲۰ سال تغییر ناپذیره و این حرف‌ها. یه دوست ایرانی که هنوز هم ایرانه چنین کدی رو سال‌هاست نوشته:
                      http://savannah.nongnu.org/projects/jcal/
                      همون دستور cal لینوکسه

                      1 Reply Last reply
                      0

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved