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

Inspiring

عضو جدید
بچه ها سلام کسی میتونه به من کمک کنه در نوشت برنامه تبدیل تاریخ میلادی به شمسی؟ یا اینکه برنامشو داره؟
ممنون میشم
 

mohan21

عضو جدید
در php از کدی مانند کد زیر استفاده می کنم، به c++ تبدیل کردم، اگر جایی اشکال داشت ببخشید ...

PHP:
    int div(int A, int B)
    {
        return (int)(A / B);
    }

    void DateMiladiToShamsi(int GetDateYearMiladi, int GetDateMonthMiladi, int GetDateDayMiladi)
    {
        char ArrayShamsiMonthName[12][] = {"فروردين", "ارديبهشت", "خرداد", "تير", "مرداد", "شهريور", "مهر", "آبان", "آذر", "دي", "بهمن", "اسفند"};
        char ArrayShamsiDayName[7][] = {"يكشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنج شنبه", "جمعه", "شنبه"};

        int MiladiDaysInMonth[12] = array (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
        int ShamsiDaysInMonth[12] = array (31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);

        int DateMiladiYear = GetDateYearMiladi - 1600;
        int DateMiladiMonth = GetDateMonthMiladi - 1;
        int DateMiladiDay = GetDateDayMiladi - 1;

        int DateMiladiDayNo = 365 * DateMiladiYear + div(DateMiladiYear + 3, 4) - div(DateMiladiYear + 99, 100) + div(DateMiladiYear + 399, 400);

        for(int i = 0; i < DateMiladiMonth; i++)
            DateMiladiDayNo += MiladiDaysInMonth[i];

        if(DateMiladiMonth > 1 and ((DateMiladiYear % 4 == 0 and DateMiladiYear % 100 != 0) or (DateMiladiYear % 400 == 0)))
            DateMiladiDayNo++;

        DateMiladiDayNo += DateMiladiDay;
        DateShamsiDayNo = DateMiladiDayNo - 79;
        int DateShamsiDayNP = div(DateShamsiDayNo, 12053);
        DateShamsiDayNo = DateShamsiDayNo % 12053;
        int DateShamsiYear = 979 + 33 * DateShamsiDayNP + 4 * div(DateShamsiDayNo, 1461);
        DateShamsiDayNo %= 1461;

        if(DateShamsiDayNo >= 366)
        {
            DateShamsiYear += div(DateShamsiDayNo - 1, 365);
            DateShamsiDayNo = (DateShamsiDayNo - 1) % 365;
        }

        for(int i = 0; i < 11 and DateShamsiDayNo >= ShamsiDaysInMonth[i]; i++)
            DateShamsiDayNo -= ShamsiDaysInMonth[i];

        DateShamsiYear = DateShamsiYear;
        int DateShamsiMonth = (i + 1 >= 10)? (i + 1) : ('0'.(i + 1));
        int DateShamsiMonthName = ArrayShamsiMonthName[DateShamsiMonth - 1];
        int DateShamsiDay = (DateShamsiDayNo + 1 >= 10)? (DateShamsiDayNo + 1) : ('0'.(DateShamsiDayNo + 1));
        int DateShamsiDayName = ArrayShamsiDayName[شماره روز هفته، مثلاً 5 برای روز پنجم هفته که چهارشنبه می باشد];

        cout << " Year :: " << DateShamsiYear << " Month :: " << DateShamsiMonth << " MonthName :: " << DateShamsiMonthName << " Day :: " << DateShamsiDay << " DayName :: " << DateShamsiDayName;
    }
تاریخ میلادی رو بصورت سال، ماه، روز بصورت int به تابع ارسال کنید، امیدوارم جواب بده ....


این هم کد اصلی ::
PHP:
$TimeZone = 4.5;
    $DefaultTime = time() + 3600 * ($TimeZone + date("I"));

    $ArrayShamsiMonthName = array ("فروردين", "ارديبهشت", "خرداد", "تير", "مرداد", "شهريور", "مهر", "آبان", "آذر", "دي", "بهمن", "اسفند");
    $ArrayShamsiDayName = Array ("يكشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنج شنبه", "جمعه", "شنبه");


    function div($A, $B)
    {
        return (int)($A / $B);
    }

    function DateMiladiToShamsi($GetDateYear, $GetDateMonth, $GetDateDay)
    {
        global $DefaultTime;
        global $ArrayShamsiMonthName;
        global $ArrayShamsiDayName;
        $MiladiDaysInMonth = array (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
        $ShamsiDaysInMonth = array (31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);

        $DateMiladiYear = $GetDateYear - 1600;
        $DateMiladiMonth = $GetDateMonth - 1;
        $DateMiladiDay = $GetDateDay - 1;

        $DateMiladiDayNo = 365 * $DateMiladiYear + div($DateMiladiYear + 3, 4) - div($DateMiladiYear + 99, 100) + div($DateMiladiYear + 399, 400);

        for($i = 0; $i < $DateMiladiMonth; $i++)
            $DateMiladiDayNo += $MiladiDaysInMonth[$i];

        if($DateMiladiMonth > 1 and (($DateMiladiYear % 4 == 0 and $DateMiladiYear % 100 != 0) or ($DateMiladiYear % 400 == 0)))
            $DateMiladiDayNo++;

        $DateMiladiDayNo += $DateMiladiDay;
        $DateShamsiDayNo = $DateMiladiDayNo - 79;
        $DateShamsiDayNP = div($DateShamsiDayNo, 12053);
        $DateShamsiDayNo = $DateShamsiDayNo % 12053;
        $DateShamsiYear = 979 + 33 * $DateShamsiDayNP + 4 * div($DateShamsiDayNo, 1461);
        $DateShamsiDayNo %= 1461;

        if($DateShamsiDayNo >= 366)
        {
            $DateShamsiYear += div($DateShamsiDayNo - 1, 365);
            $DateShamsiDayNo = ($DateShamsiDayNo - 1) % 365;
        }

        for($i = 0; $i < 11 and $DateShamsiDayNo >= $ShamsiDaysInMonth[$i]; $i++)
            $DateShamsiDayNo -= $ShamsiDaysInMonth[$i];

        $DateShamsiYear = $DateShamsiYear;
        $DateShamsiMonth = ($i + 1 >= 10)? ($i + 1) : ('0'.($i + 1));
        $DateShamsiMonthName = $ArrayShamsiMonthName[$DateShamsiMonth - 1];
        $DateShamsiDay = ($DateShamsiDayNo + 1 >= 10)? ($DateShamsiDayNo + 1) : ('0'.($DateShamsiDayNo + 1));
        $DateShamsiDayName = $ArrayShamsiDayName[date(w, $DefaultTime)];

        return array($DateShamsiYear, $DateShamsiMonth, $DateShamsiMonthName, $DateShamsiDay, $DateShamsiDayName);
    }
 
آخرین ویرایش:

Inspiring

عضو جدید
مرسی دوست عزیز فقط چون برنامه نویسی من افتضاحه میشه بگی اینو که نوشتم چه جوری باید فراخوانیش کنم؟!
 

Similar threads

بالا