سافت دیزاین

کاربرد نرم افزار، برنامه نویسی و شبکه

سافت دیزاین

کاربرد نرم افزار، برنامه نویسی و شبکه

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

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

برای تبدیل تاریخ میلادی به هجری شمسی (خورشیدی) در زبان های برنامه نویسی که کتابخانه های تبدیل تاریخ به هجری را ندارند برنامه نویسان مجبورند تا از توابع و کلاس هایی که خودشان (و یا دیگران) نوشته اند استفاده کنند. در ادامه کد تبدیل تاریخ میلادی به شمسی که به زبان C نوشته شده است را می بینید. البته این کدبه راحتی داخل یک تابع قابل پیاده سازی است. همچنین می توان آن را به راحتی به زبان های دیگر انتقال داد.

  
    int gy, gm, gd; // Gregorian Date : gy=سال میلادی, gm=ماه میلادی gd=روز میلادیe.g. gy=2017, gm=11, gd=25
    int a=(14-gm)/12;
    int m=gm+(12*a)-3;
    int y=gy-a-1600;
    int d=(365*y)+(y/4)-(y/100)+(y/400)+((153*m+2)/5)+gd-1;
    int n=d-84756;
    int a2=n%12053;
    int b2=(a2%1461)+(1461*(a2/11688));
    int c2=(b2%365)+(365*(b2/(1460+(365*((a2+1)/11688)))));
    int yy=1211+(33*(n-a2))/12053+(4*(a2-b2))/1461+(b2-c2)/365;
    int mm=(c2-(186*(c2/186)))/(31-(c2/186))+(6*(c2/186))+1;
    int dd=(c2-(186*(c2/186)))%(31-(c2/186))+1;
    int yday;
    if (mm<6)
        yday=(mm-1)*31+dd;
    else
        yday=186+(mm-7)*30+dd;
    printf("a=%d, m=%d, y=%d\n",a,m,y);
    printf("d=%d, n=%d\n",d,n);
    printf("a2=%d, b2=%d, c2=%d\n",a2,b2,c2);
    printf("yy=%d, mm=%d, dd=%d\n",yy,mm,dd)
//Jalali Date: yy: سال هجری mm: ماه هجری dd: روز هجری

در کد بالا ورودی ها به صورت جدا gy,gm,gd بخش های تاریخ میلادی هستند و خروجی ها yy, mm, dd بخش های تاریج هجری.


نظرات 0 + ارسال نظر
امکان ثبت نظر جدید برای این مطلب وجود ندارد.