نمایش نتایج 1 تا 8 از 8

نام تاپیک: تبديل تاريخ ميلادي به شمسي

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1

    تبديل تاريخ ميلادي به شمسي

    سلام دوستان
    من در حال نوشتن يه پرو‍ژه بودم كه نياز به گزارش گيري شدم كه در اون بايد تاريخ و به شمسي نمايش مي دادم واسه همين به دنبال روشي براي اين كار گشتم تنها راهي كه پيدا كردم استفاده از dll هايي كه تعداي از برنامه نويسا واسه تبديل تاريخ نوشته بودن كه يه كم استفاده از اونا مشكل بود منم يه تابع براي اينكار نوشتم اين كد به زبان C#‎‎ و تو بخش گزارش گيري تابع فرموله اون براي كريستال ريپورت رو هم قرار مي دم
    اين كد براي 1000 سال تست شده!!!
    class PersianDate
    {
    public String PersianDate(DateTime date)
    {
    int[] DaysToMonth365 = new int[] { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
    int[] DaysToMonth366 = new int[] { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 };
    int[] DaysToMonth = new int[] { 0, 31, 62, 93, 124, 155, 186, 216, 246, 276, 306, 336 };
    int[] LeapYears33 = new int[] { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 };
    bool IsLeapYear;
    int year = date.Year;
    int day = date.Day;
    int month = date.Month;
    if ((year % 4) != 0)
    {
    IsLeapYear = false;
    }
    else if ((year % 100) == 0)
    {
    IsLeapYear = (year % 400) == 0;
    }
    else
    IsLeapYear = true;
    int[] numArray1;
    if (IsLeapYear)
    numArray1 = DaysToMonth366;
    else
    numArray1 = DaysToMonth365;

    int num1 = year - 1;
    int num2 = ((((((num1 * 365) + (num1 / 4)) - (num1 / 100)) + (num1 / 400)) + numArray1[month - 1]) + day) - 1;
    long num4 = num2 + 1;
    int PersianYear = ((int)(((num4 - 226894) * 33) / ((long)12053))) + 1;

    int numtmp2 = (PersianYear - 1) / 33;
    int yeartmp = (PersianYear - 1) % 33;
    long num5 = (numtmp2 * 12053) + 226894;
    while (yeartmp > 0)
    {
    num5 = num5 + 365;
    if (LeapYears33[yeartmp % 33] == 1)
    {
    num5 = num5 + 1;
    }
    yeartmp = yeartmp - 1;
    }
    MessageBox.Show(num5.ToString() );
    long num6;
    if (PersianYear == 9378)
    {
    num6 = DaysToMonth[9] + 10;
    }
    else if (!(LeapYears33[PersianYear % 33] == 1))
    {
    num6 = 365;
    }
    else
    num6 = 366;
    if (num4 < num5)
    {
    num5 = num5 - num6;
    PersianYear = PersianYear - 1;
    }
    else if (num4 == num5)
    {
    PersianYear = PersianYear - 1;
    int temp;
    if (PersianYear == 9378)
    {
    temp = DaysToMonth[9] + 10;
    }
    else if (!(LeapYears33[PersianYear % 33] == 1))
    {
    temp = 365;
    }
    else
    temp = 366;
    num5 = num5 - temp;
    }
    else
    {
    if (num4 > (num5 + num6))
    {
    num5 = num5 + num6;
    PersianYear=PersianYear+1 ;
    }
    }

    num4= num4 - num5;
    int num12 = 0;
    while ((num12 < 12) && (num4 > DaysToMonth[num12]))
    {
    num12=num12+1;
    }
    int num3 = ((int)num4) - DaysToMonth[num12 - 1];
    return PersianYear.ToString()+"/" + num12.ToString()+"/"+ num3.ToString() ;
    }
    }

    اين هم لينك كريستال ريپورت
    https://barnamenevis.org/showth...768#post939768
    آخرین ویرایش به وسیله behzad1986 : یک شنبه 08 فروردین 1389 در 08:44 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •