/* Hossien Vismeh ( IRAN-ARAK ) hepco_kid@yahoo.com 1384/6/26 2005/09/17 hegri shamsi to miladi and reverse code with C for use in any C compiler ( specialy in Microcontrolelr ) ----- ba tashakor az doost azizam Reza Gamshidi -------- */ #include #include #include void miladi_to_shamsi(int y,int *year,char *month,char *day) { const int FST_SIZE = 12; int FST[FST_SIZE] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; int leap = 0; int leaps = 0; int tmp; (*year) %= 100; if(((*year) % 4) == 0) leap = 1; for(int idx=2; idx 6) || (*day == 30 && leap != 0 && *month == 12)) { *day = 1; (*month)++; } if(*month == 13) { *month = 1; (*year)++; } } *year += 1300 - (y - 79); } void shamsi_to_miladi(int *iyear,char *imonth,char *iday) { if(((*imonth) < 10) || ((*imonth) == 10 && (*iday) < 11)) (*iyear) += 621; else (*iyear) += 622; switch(*imonth) { case 1: if ((*iday) < 12) { *imonth = 3; (*iday) += 20; } else { *imonth = 4; (*iday) -= 11; } break; case 2: if ((*iday) < 11) { *imonth = 4; (*iday) += 20; } else { *imonth = 5; (*iday) -= 10; } break; case 3: if ((*iday) < 11) { *imonth = 5; (*iday) += 21; } else { *imonth = 6; (*iday) -= 10; } break; case 4: if ((*iday) < 10) { *imonth = 6; (*iday) += 21; } else { *imonth = 7; (*iday) -= 9; } break; case 5: case 6: case 8: if ((*iday) < 10) { (*imonth) += 2; (*iday) += 22; } else { (*imonth) += 3; (*iday) -= 9; } break; case 7: if ((*iday) < 9) { *imonth = 9; (*iday) += 22; } else { *imonth = 10; (*iday) -= 8; } break; case 9: if ((*iday) < 10) { *imonth = 11; (*iday) += 21; } else { *imonth = 12; (*iday) -= 9; } break; case 10: if ((*iday) < 11) { *imonth = 12; (*iday) += 21; } else { *imonth = 1; (*iday) -= 10; } break; case 11: if ((*iday) < 12) { *imonth = 1; (*iday) += 20; } else { *imonth = 2; (*iday) -= 11; } break; case 12: if ((*iday) < 10) { *imonth = 2; (*iday) += 19; } else { *imonth = 3; (*iday) -= 9; } } } void main() { int year_miladi=2005; char month_miladi=9; char day_miladi=17; int year_shamsi=1384; char month_shamsi=6; char day_shamsi=28; printf("\n---------------------------------\n"); printf("Miladi to Shamsi:\n"); printf("Miladi date is: %d/%02d/%02d\r\n",year_miladi,month_miladi,day_miladi); miladi_to_shamsi(83,&year_miladi,&month_miladi,&day_miladi); printf("Shamsi date is: %d/%02d/%02d\r\n",year_miladi,month_miladi,day_miladi); printf("\nShamsi to Miladi:\n"); printf("Miladi date is: %d/%02d/%02d\r\n",year_shamsi,month_shamsi,day_shamsi); shamsi_to_miladi(&year_shamsi,&month_shamsi,&day_shamsi); printf("Shamsi date is: %d/%02d/%02d\r\n",year_shamsi,month_shamsi,day_shamsi); getch(); }