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

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

13 آبان 1392

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

این کد از قبلی خیلی بهتره چون با تایم استمپ کار می کنه.



  #include <iostream>

using namespace std;
// مبدل میلادی به شمسی.
int main(int year, int month, int day)
{
    year = 2015;
    month = 11;
    day = 1;

    // تبدیل تاریخ به زمانمهر
    // تفاوت از 1/1/1900 با فرض اینکه 1/1/1900 معادل با 1 است.
    int currentTimeStamp = 1;//41579;
    int isLeap = 0;
    int sumOfDayNormalYear[] = {0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
    int sumOfDayNormalLeapYear[]= {0, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335};

    for (int i = 1901; i <= year; i++)
    {
        if(((i % 100)!= 0 && (i % 4) == 0) || ((i % 100)== 0 && (i % 400) == 0))
        {
            currentTimeStamp += 366;
            isLeap = 1;
        }
        else
        {
            currentTimeStamp += 365;
            isLeap = 0;
        }
    }
   
    if(isLeap)
        currentTimeStamp += sumOfDayNormalLeapYear[month];
    else
        currentTimeStamp += sumOfDayNormalYear[month];

    currentTimeStamp += day;
   
    int diff = currentTimeStamp - 7385;
    int diff100 = 100*diff;
   
    int shamsiYear =(int) (diff100 / 36525) + 1299;

    int shamsiMonth = 0;
    int shamsiDay = 0;

    if ((int)((diff100 % 36525) / 100) < 186)
    {
        shamsiMonth = ((int)((diff100 % 36525) / 100)) / 31;
        shamsiDay = ((int)((diff100 % 36525) / 100)) % 31 + 1;
    }
    else if ((int)(diff100 / 36525) % 4 == 0)
    {
        shamsiMonth = ((int)((diff100 % 36525) / 100) - 186) / 30 + 6;
        shamsiDay = ((int)((diff100 % 36525) / 100) - 186) % 30 + 1;
    }
    else if ((int)((diff100 % 36525) / 100) < 336)
    {
        shamsiMonth = ((int)((diff100 % 36525) / 100) - 186) / 30 + 6;
        shamsiDay = ((int)((diff100 % 36525) / 100) - 186) % 30 + 1;
    }
    else
    {
        shamsiMonth = (((int)((diff100 % 36525) / 100) - 336)) / 29 + 11;
        shamsiDay = (((int)((diff100 % 36525) / 100) - 336)) % 29 + 1;
    }

    shamsiMonth = shamsiMonth % 12 + 1;

    cout << shamsiYear <<"/"<< shamsiMonth <<"/" << shamsiDay ;
    return 0;
}