X
تبلیغات
رایتل

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

6 فروردین 1390
با توجه به فشار روانی که سجاد به من وارد کرد، این کد رو به زبان C درست کردم.

#include <iostream>
using namespace std;
int main()
{
    int sYear = 1367;
    int sMonth = 02;
    int sDay = 06;
    //'******************* Leap year
    if (sYear == 1378) {
        if (sMonth == 12 && sDay == 10)
            { sYear = 2000; sMonth = 2; sDay = 29; }//break; }

        if (sMonth == 12 && sDay > 10)
            sDay --;
    }
    else
        if (sYear == 1379) {
        sDay --;

        if (sDay == 0) {
            sMonth --;
            if (sMonth > 0 && sMonth < 7) sDay = 31;
            if (sMonth > 6) sDay = 30;
            if (sMonth == 0){
                sDay = 29;
                sMonth = 12;
                sYear --;
            }
        }
    }
    //'*******************

    if (sMonth < 10 || (sMonth == 10 && sDay < 11))
        sYear += 621;
    else
        sYear += 622;

    switch (sMonth) {
        case 1:
        {
            sMonth = (sDay < 12) ? 3 : 4;
            sDay += (sDay < 12) ? 20 : -11;
            break;
        }
        case 2:
        {
            sMonth = (sDay < 11) ? 4 : 5;
            sDay += (sDay < 11) ? 20 : -10;
            break;
        }
        case 3:
        {
            sMonth = (sDay < 11) ? 5 : 6;
            sDay += (sDay < 11) ? 21 : -10;
            break;
        }
        case 4:
        {
            sMonth = (sDay < 10) ? 6 : 7;
            sDay += (sDay < 10) ? 21 : -9;

            break;
        }
        case 5:
        case 6:
        case 8:
        {
            sMonth += (sDay < 10) ? 2: 3;
            sDay += (sDay < 10) ? 22 : -9;
            break;
        }
        case 7:
        {
            sMonth = (sDay < 9) ? 9 : 10;
            sDay += (sDay < 9) ? 22: -8;
            break;
        }
        case 9:
        {
            sMonth = (sDay < 10) ? 11: 12;
            sDay += (sDay < 10) ? 21 : -9;
            break;
        }
        case 10:
        {
            sMonth = (sDay < 11) ? 12 : 1;
            sDay += (sDay < 11) ? 21 : -10;
            break;
        }
        case 11:
        {
            sMonth = (sDay < 12) ? 1 : 2;
            sDay += (sDay < 12) ? 20 :-11;
            break;
        }
        case 12:
        {
            sMonth = (sDay < 10) ? 2 : 3;
            sDay += (sDay < 10) ? 19 : -9;

            break;
        }
    }

        cout<<sYear<<"-"<<sMonth<<"-"<<sDay;
}

------------------------------------------------------------------------------------------

#include <iostream>
using namespace std;
int main()
{
    int gYear = 1988;
    int gMonth = 06;
    int gDay = 11;


    gYear = (gYear== 0) ? 2000 : gYear;
    gYear += (gYear<1000) ? 2000 : 0;

    gYear -= ( (gMonth < 3) || ((gMonth == 3) && (gDay < 21)) ) ? 622 : 621;
    switch (gMonth) {
        case 1:
        {
            gMonth = (gDay<21)? 10:11;
            gDay += (gDay<21)? 10:-20;
            break;
        }
        case 2:
        {
            gMonth = (gDay<20)? 11:12;
            gDay += (gDay<20)? 11:-19;
            break;
        }
        case 3:
        {
            gMonth = (gDay<21)? 12:1;
            gDay += (gDay<21)? 9:-20;
            break;
        }
        case 4:
        {
            gMonth = (gDay<21)? 1:2;
            gDay += (gDay<21)? 11:-20;

            break;
        }
        case 5:
        case 6:
        {
            gMonth -= (gDay<22)? 3:2;
            gDay += (gDay<22)? 10:-21;

            break;
        }
        case 7:
        case 8:
        case 9:
        {
            gMonth -= (gDay<23)? 3:2;
            gDay += (gDay<23)? 9:-22;
            break;
        }
        case 10:
        {
            gMonth = (gDay<23)? 7:8;
            gDay += (gDay<23)? 8:-22;

            break;
        }
        case 11:
        case 12:
        {
            gMonth -= (gDay<22)? 3:2;
            gDay += (gDay<22)? 9:-21;
            break;
        }
        default: break;
    }
    cout<<gYear*10000+gMonth*100+gDay;
}