با تشکر از 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;
}
مطلب جالبی بود موفق باشید